У меня есть условное утверждение:
if($boolean && expensiveOperation()){ ...}
Есть ли у PHP ленивая логическая оценка, т. Е. Будет ли она проверять $boolean
и если она ложна, не беспокоиться о выполнении дорогостоящей операции? Если да, то в каком порядке следует поместить мои переменные?
Да. Это называется оценкой короткого замыкания. См. Комментарии на странице документации …
Что касается заказа, он выполняет проверки на основе приоритета оператора, а затем слева направо. Так:
A || B || C
Сначала будет оценивать A, а затем B, только если A является ложным, а C – только если оба A и B являются ложными …
Но
A AND B || C
Всегда будет оценивать B || C
B || C
, так как ||
имеет более высокий приоритет, чем AND
(не верно для &&
).
Да, PHP делает оценку короткого замыкания .
PHP имеет оценку короткого замыкания. Ваш пример будет правильным использованием:
http://en.wikipedia.org/wiki/Short-circuit_evaluation#Support_in_common_programming_languages