Это оценивается как ИСТИНА.
$A = TRUE;
$B = FALSE;
$result = ($A) AND ($B) ? true : false;
Почему оценка соответствует действительности, и как именно оценка проводится шаг за шагом?
Спасибо
Это не связано с троичным. Это потому что =
имеет более высокий старшинство чем and
, Это означает, что вы устанавливаете $result = ($A)
а потом все после and
не имеет значения.
($B) ? true : false
делает оценить false
, но поскольку присваивание уже произошло в первой части выражения, оно ни к чему не присваивается. Это в основном игнорируется.
Для более простого примера попробуйте
$result = true and false;
$result
будет true
,
Моя первоначальная мысль была Это возвращается true
из-за пропущенных скобок. причина: троичные выражения оцениваются слева направо. Увидеть DEMO это вернется bool(false)
если вы оберните это с круглыми скобками ()
$A = TRUE;
$B = FALSE;
$result = (($A) AND ($B)) ? true : false;
var_dump($result);
Отредактировано: Зачем & как используется второй FALSE?
Так как and/or
иметь более низкий приоритет, чем =
, но ||
или же &&
иметь более высокий приоритет, чем =
, Например.
<?php
$bool = true && false;
var_dump($bool); // false, that's expected
$bool = true and false;
var_dump($bool); // true, ouch!
?>
Надеюсь, теперь это понятно :).
источник: http://php.net/manual/en/language.operators.precedence.php#117390