PHP — простое условие со скобками

#php #conditional-statements

#php #условные операторы

Вопрос:

У меня глупый вопрос об этом условии.
Почему, когда я ставлю скобки, результат условия меняется?

 $std = new stdClass();
$std->bool = false;
$resultCond1 = isset($std->bool) and $std->bool == true;
$resultCond2 = (isset($std->bool) and $std->bool == true);

var_dump($resultCond1); // True. 
var_dump($resultCond2); // False.
  

Комментарии:

1. Если вы используете amp;amp; вместо and , то скобки ничего не изменят.

Ответ №1:

Я считаю, что это связано с приоритетом оператора.

Обратите внимание, что в этой таблице операторы присваивания находятся между and и amp;amp; . Вот что, я думаю, происходит:

В первом примере isset возвращает значение true, и перед выполнением and операции происходит присвоение. После присваивания результат присваивания редактируется and , и результат этой and операции затем вкратце отбрасывается.

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

Вы можете увидеть это более четко, если полностью удалите операцию присваивания и просто удалите результат самих операций:

 var_dump(isset($std->bool) and $std->bool == true);   // bool(false)
var_dump((isset($std->bool) and $std->bool == true)); // bool(false)
  

Ответ №2:

Оба эти условия не выдают одинаковый результат из-за приоритета оператора.

1) Для первого — isset($std->bool) возвращает true, после этого он будет проверять and $std->bool , наконец, он будет сравнивать этот результат с true

2) Для второго — он будет проверять isset($std->bool) и $std->bool == true отдельно. Затем сравните оба этих результата.

Второй — более удобный и чистый способ выполнения такого рода работы.