Например, что отличаетс от переменной $=== true?
<?php
if (true === $variable) {
//
}
if (1 === intval($variable)) {
//
}
Например, что отличаетс от переменной $=== true?
<?php
if (true === $variable) {
//
}
if (1 === intval($variable)) {
//
}
Они эквивалентны.
Некоторые программисты предпочитают этот стиль "Йода", чтобы избежать риска случайного написания:
if ($variable = true) {
// ...
}
что эквивалентно
$variable = true;
// ...
когда они хотели написать
if ($variable === true) {
// ...
}
(тогда как if (true = $variable)
генерирует очевидную ошибку, а не потенциально-тонкую ошибку).
Короткий ответ
Некоторые люди делают это, чтобы избежать ошибочного использования оператора присваивания (=
), когда они действительно хотели использовать оператор сравнения (==
или ===
).
Длинный ответ
В PHP есть три оператора, которые могут быть приняты за друг друга:
=
- оператор присваивания==
является оператором "equal to" ===
- оператор "идентичен" Первый оператор используется только для назначения значения переменной. Второй и третий используются только для сравнения двух значений или выражений против eachother.
В PHP можно присвоить значение переменной внутри структур управления (if
, for
, while
и т.д.). Это может вызвать проблемы, если вы не будете осторожны. Например, если вы хотите сравнить $a
с логическим значением, вы можете сделать это следующим образом:
if ($a == false) // or
if ($a === false)
Если вы не будете осторожны, это может закончиться следующим образом:
if ($a = false)
... это совершенно легальный код, но это назначение и в конечном итоге вызовет проблемы. Причина, по которой это вызовет проблемы, состоит в том, что выражение $a=false
будет оцениваться, и код будет работать, как будто ничего не случилось, когда на самом деле он не был предназначен.
Причина, по которой некоторые люди переключаются вокруг операндов при сравнении значения с литералом (фиксированное значение, например true
, false
, 7
, 5.2
и т.д.), связано с тем, что оно не возможно присвоить значение литералу. Например:
if (false = $a)
... вызовет ошибку, сообщив программисту, что они допустили ошибку, которую они затем могут исправить.
Думаю, это всего лишь способ мышления в целом. Когда вы действительно думаете о глубоком выражении if, вы думаете, что это утверждение истинно, а не другая точка зрения. Это не так, но в моей голове, назвав его обратным, меня раздражало бы и заставляло бы меня терять концентрацию в этом заявлении. Поэтому я бы сказал так, как думают люди: D.
Нет разницы между ($var === true)
и (true === $var)
. Они эквивалентны.
См. http://php.net/manual/en/types.comparisons.php для полной таблицы сравнений. Вы увидите, что все эквивалентные сравнения имеют одинаковый результат.
Также некоторые люди предпочитают видеть, какой результат был оценен до утверждения. Некоторые утверждения могут быть длиннее и сложнее для чтения.
Пример:
if (false == (new DataParser()->makeAComplexDataParser((new SomeTransformer()->doTransformation((new someClass()->getMethodOfLongParameters($param1, $param2, (new Date()->format('Y-m-d')))))))) ) {
// do stuff
}
Так что лучше подумать "это ложное это сложное выражение?" вместо того, чтобы думать "это сложное выражение… ааааа… ложь?"