#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" выведено не будет. Из чего можно сделать какое-то предположение...
Комментариев нет:
Отправить комментарий