Моя первоначальная мысль была Возвращается 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