2015-04-05 5 views
-1

Эти две линии дают разные результаты:Помещение круглых скобок вокруг этого выражения PHP изменяет результат. Зачем?

$r1= true xor true ; 
$r2=(true xor true); 

var_dump($r1); 
var_dump($r2); 

Выход:

bool(true) 
bool(false) 

Почему?

Codepen пример: http://codepad.org/O4Kn1YVa

+0

есть только один логический вывод .... –

+0

Оператор '=' имеет более высокий [приоритет] (http://php.net/language.operators.precedence), чем оператор 'xor'. – Gumbo

ответ

1

http://php.net/manual/en/language.operators.precedence.php

= выше, чем приоритет исключающего

$r1 = true xor true ; 

=>

($r1 = true) xor true ; // "=" has highest priority 

=>

$r1 xor true ; // and only now xor 

В этом случае вы не записываете результат xor нигде и потеряли его.

В случае, если с результатом 2 вы форсируете заказ выполнения скобками.

+0

Возможно, вы правы. Тем не менее это кажется несколько неожиданным. Я немного упростил этот пример. Может быть, вы тоже захотите адаптировать свой ответ. –

+0

Готово. Также вы можете получить такое же поведение при объединении строк и тройном операторе «?:», Когда используете его без круглых скобок. – Denis

0

Все круглые скобки сделать для обеспечения приоритета. Поэтому, если их добавление имеет значение, вы изменили порядок приоритета/выполнения.

Какой случай здесь: http://php.net/manual/en/language.operators.precedence.php

+0

Спасибо. это имеет больше смысла, чтобы устранить путаницу. –

Смежные вопросы