Страницы

Поиск по вопросам

вторник, 13 ноября 2018 г.

PHP: все ли части обрабатываются в составном логическом выражении или обработка прекращается после первого false?

Допустим, в выражении
if (0 == 1 && (2+2) == 5 && $object->getValue() == true) { ... }
Будет ли высчитываться 2+2 и $object->getValue() или логическое выражение сразу вернет ложь из-за 0 == 1 ?


Ответ

Есть такое понятие, как Short-circuit evaluation (оно же minimal evaluation, оно же McCarthy evaluation).
Суть Short-circuit evaluation состоит в том, что для логических выражений, использующих определенные логические операторы (в русской документации оно переведено, как "шунтирующие операторы"), вычисление результата всего выражения происходит последовательно, слева направо и прекращается тогда, когда вычисление последующих частей выражения не повлияет на конечный результат.
Например
$a = false && expression2 && expression3 && ....; $b = false || true || expression2 || expression3 || ....;
Вычисление значения для $a остановится сразу же после первого false. expression2 и expression3 даже не будут вычисляться/исполняться, поскольку уже не смогут повлиять на конечный результат.
Вычисление $b остановится после первого выражения, вернувшего true, по тем же причинам.
В PHP, шунтирующими операторами(т.е. для которых будет выполняться подобный алгоритм вычисления) являются &&, ||, and и or

Комментариев нет:

Отправить комментарий