В PHP, если у вас есть следующий код, вычисляется ли $ b, так как $ a заставит оператор if вернуть false?
$a = false;
$b = true;
if ($a && $b) {
// more code here
}
также, если $ b действительно оценивается, есть ли случаи, когда часть оператора if может не оцениваться, поскольку процессор уже знает, что значение равно false?
Оценка &&
останавливается, как только он попадает в 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());
Оценка логических выражений прекращается, как только известен результат.
Если $a
ложно, $b
не будет оцениваться, так как не изменится ($a && $b
) результат.
Следствием этого является то, что если оценка $b
требует больше ресурсов, чем оценка $a
, начинает ваше тестовое состояние с $a
,
Но знайте, что:
PHP (в общем случае) не указывает, в каком порядке вычисляется выражение, и следует избегать кода, предполагающего определенный порядок вычисления, поскольку поведение может изменяться между версиями PHP или в зависимости от окружающего кода. (Исходные документы php)
Так что не стоит предполагать $b
никогда не оценивается, если $a
ложно, так как оно может измениться в будущем (говорит php docs).