оператор if — PHP, если выполнение

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

$a = false;
$b = true;

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

также, если $ b действительно оценивается, есть ли случаи, когда часть оператора if может не оцениваться, поскольку процессор уже знает, что значение равно false?

0

Решение

Оценка && останавливается, как только он попадает в 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());
4

Другие решения

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

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

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

Но знайте, что:

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

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

1

По вопросам рекламы [email protected]