PHP, если ИЛИ проверена ли вторая часть на true? - PullRequest
4 голосов
/ 22 июля 2011

Я знаю, что это должен быть простой вопрос, но я знаю, что в PHP в выражении, подобном этому

if ($a && $b) { do something }

если $ a ложно, PHP даже не проверяет $ b

Ну, то же самое верно и в отношении ИЛИ, поэтому

if ($a || $b) { do something }

Если $ a истинно, проверяет ли он $ b

Я знаю, что это элементарные вещи, но я нигде не могу найти ответ ... Спасибо

Ответы [ 5 ]

9 голосов
/ 22 июля 2011

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

логические операторы

8 голосов
/ 22 июля 2011

См. Пример 1 на странице Логические операторы в руководстве.

// --------------------
// 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());
1 голос
/ 22 июля 2011

Посмотрите на этот пример:

function foo1() {
  echo "blub1\n";
  return true;
}

function foo2() {
  echo "blub2\n";
  return false;
}

if (foo1() || foo2()) {
  echo "end.";
}

$ b / foo2 () не проверено. Демо здесь: codepad.org

0 голосов
/ 22 июля 2011

Если вы достаточно хорошо знаете свои таблицы истинности, то, возможно, вы сами это поймете. Как уже говорили другие, PHP будет оценивать, пока не будет уверен в результате. В случае ИЛИ только один должен быть истинным, чтобы оператор возвращал истину. Так что PHP оценивает, пока не найдет истинное значение. Если он не находит, оператор оценивается как ложный.

<?php
if(true && willGetCalled()) {}
if(false && wontGetCalled()) {}
if(true || wontGetCalled()) {}
if(false || willGetCalled()) {}
?>
0 голосов
/ 22 июля 2011

Если хотя бы один операнд имеет значение «истина», нет необходимости идти дальше и проверять другие операнды, и все это будет иметь значение «истина».

(a || b || c || d|| e || ...) будет TRUE, если хотя бы один из операндов верен, поэтому, как только я обнаружил, что один операнд является истиной, мне не нужно проверять следующие операнды.

Эта логика применяетсявезде, PHP, JAVA, C ...

...