Оператор "?"и оператор И оценка - PullRequest
0 голосов
/ 17 сентября 2018

Это оценивается как ИСТИНА.

$A = TRUE;
$B = FALSE;

$result = ($A) AND ($B) ? true : false;

Почему оценка соответствует действительности, и как именно оценка проводится шаг за шагом?

Спасибо

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Это не связано с троичным. Это потому, что = имеет более высокий приоритет , чем and. Это означает, что вы устанавливаете $result = ($A), а затем все, что после and не имеет значения.

($B) ? true : false оценивает как false, но поскольку присваивание уже произошло в первой части выражения, оно не присваивается ни для чего. Это в основном игнорируется.

Для более простого примера попробуйте

$result = true and false;

$result будет true.

0 голосов
/ 17 сентября 2018

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

...