2012-03-26 4 views
1

Скажите, у вас есть такое состояние;php порядок исполнения

if ($condition_1 && $condition_2)

и у вас есть возможность писать его как

if ($condition_2 && $condition_1)

Теперь, если Condition_1 занимает 1 мс, чтобы понять это, является ли оно истинным или ложным и condition_2 с другой стороны занимает намного больше времени, скажем, 1000 мс !, в каком виде вы могли бы написать вышеуказанное условие? медленнее один справа или слева?

Я предполагаю, что, когда одно из условий окажется ЛОЖНЫМ, PHP не стал бы проверять, является ли другое условие ИСТИНА. Если бы это было так, это было бы самым большим сюрпризом века!

+2

с функциями работает на 1000 мс в, если заявление, ваша самая большая проблема ISN» t который работает сначала –

+1

Это называется [оценка короткого замыкания] (http://en.wikipedia.org/wiki/Short-circuit_evaluation), и PHP это делает. Попробуй и посмотри. – Wiseguy

+0

@andreas! это гипотичный вопрос, я мог бы сформулировать вопрос 1мс против 2 мс, и в то время я уверен, что кто-то предложил бы, зачем беспокоиться. :) –

ответ

2

C и C++ перерыв первый FALSE in AND состояние. Это также относится к PHP. Итак, я бы предложил сначала поставить более короткий. Этот пример наглядно демонстрирует случай:

function short(){ 
    return false; 
} 

function long(){ 
    sleep(5);// sleep for 5 secondsd 
    return true; 
} 

if (short() && long()){ 
    echo "condition passed"; 
}else{ 
    echo "condition failed"; 
} 

Это почти сразу же распечатать «состояние не удалось», не дожидаясь 5 секунд ....

9

Условные обозначения оцениваются слева направо. Установите самое короткое условие в крайнем левом положении. Вы правы, если самое левое условие в этом выражении if равно false, следующее условие вообще не проверяется.