2016-10-18 5 views
0

В PHP, если у вас есть следующий код, $ b получает оценку, поскольку $ a приведет к тому, что оператор if вернет false?PHP, если выполнение

$a = false; 
$b = true; 

if ($a && $b) { 
    // more code here 
} 

также, если $ б действительно получить оценку там когда-либо обстоятельства, при которых часть, если заявление не может быть оценена как процессор уже знает, что значение будет ложным?

+0

IIRC, нет, оценка остановится (и не) в $ а. –

+0

php оценивает довольно ленивый. поскольку $ a является ложным, выражение будет ложным независимо от $ b, поэтому нет причин для оценки $ b. (широко освещаются в руководстве и учебниках, AFAICR). Кроме того, вы могли бы проверить себя, используя функции, которые повторяют что-то и возвращают логическое значение. –

+0

Нет, это не будет оценено, потому что это короткие замыкания. – PeeHaa

ответ

4

Оценка && прекращена, как только она попадает в состояние false.

Эти (&&) являются операторами короткого замыкания, поэтому они не идут проверять второе условие, если первое истинное (в случае ИЛИ) или ложное (в случае И).

Ссылка: http://php.net/manual/en/language.operators.logical.php


Из документации:

<?php 

// -------------------- 
// foo() will never get called as those operators are short-circuit 

$a = (false && foo()); 
$b = (true || foo()); 
$c = (false and foo()); 
$d = (true or foo()); 
1

Оценка логических выражений прекращается, как только результат известен.

Если $a является ложным, $b не будет оцениваться, так как он не изменит результат ($a && $b).

Последствием этого является то, что если оценка $b требует больше ресурсов, чем оценка $a, начинается ваше тестовое условие с $a.

Но следует помнить, что:

PHP нет (в общем случае) указать, в каком порядке выражение вычисляется и код, который предполагает определенный порядок оценки следует избегать, так как поведение может изменяться между версиями PHP или в зависимости от окружающего кода. (Source php docs)

Таким образом, вы не должны считать, $b никогда не вычисляется, если $a является ложным, так как она может измениться в будущем (говорит PHP документы).

+0

Спасибо за пояснение, полезное для понимания –

Смежные вопросы