#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
отдельно. Затем сравните оба этих результата.
Второй — более удобный и чистый способ выполнения такого рода работы.