Страницы

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

воскресенье, 22 декабря 2019 г.

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

#php


Допустим, в выражении

if (0 == 1 && (2+2) == 5 && $object->getValue() == true) { ... }


Будет ли высчитываться 2+2 и $object->getValue() или логическое выражение сразу вернет
ложь из-за 0 == 1 ? 
    


Ответы

Ответ 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

Ответ 2



function test() { echo 'Hello!'; } if (0 == 1 && test() && (2+2) == 5 && $object->getValue() == true) { // } в результате "Hello" выведено не будет. Из чего можно сделать какое-то предположение...

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

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