PHP – обратный порядок в выражении if

Это вопрос, который прослушивает меня в течение долгого времени и не может найти ответа … Заметил, что он очень много используется разработчиками Zend Framework,

В чем разница между следующими заявлениями «если»? :

if (null === $this->user) { ... } if ($this->user === null) { ... } 

Для меня первый выглядит странно;]

Спасибо за ответ.

Solutions Collecting From Web of "PHP – обратный порядок в выражении if"

Это не разница в том, как работает ваш скрипт, это всего лишь стандарт кодирования, рекомендация

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

 if (null == $this->user) 

это тот факт, что если вы ошиблись и напишите = вместо ==, вы получите сообщение об ошибке, в то время как

 ($this->user = null) 

вместо

 ($this->user == null) 

работает, но вызывает странные ошибки (назначение и конечное значение оценивается как bool вместо сравнения)

и я предполагаю, что он просто расширен как привычка к строгому оператору сравнения (===)

Обновление : поскольку я вижу, что в этом потоке еще есть активность, даже через 3 года после того, как я опубликовал ответ, я решил, что добавлю кое-что, о чем я забыл упомянуть. Этот тип обозначений известен как yoda conditions , вы можете прочитать больше об этом на этой странице в Википедии, например.

Это хорошая практика для написания заявления. Рассмотрим этот код:

 if (10 == $var) { echo 'true'; } else { echo 'false'; } 

Если вы забыли один знак равенства:

 if (10 = $var) { } 

Затем PHP будет генерировать ошибку синтаксического анализа, поэтому вы знаете, что пропустили один = и можете исправить ошибку. Но этот код:

 if ($var = 10) { } 

будет присваивать от 10 до $var и всегда оценивает истинное состояние. Независимо от содержимого $var , код выше всегда будет отображаться «true», и его очень сложно найти эту ошибку.

При сравнении значений нет никакой разницы.

Это может быть проще для кого-то читать или писать такой код, но для меня это то же самое, что писать справа налево.

Такой порядок элементов в сравнении, я думаю, предназначен для предотвращения случайного присваивания в операторах if.

Результат будет таким же, однако второй логичен. Вы хотите проверить, является ли переменная NULL, а не если NULL является переменной … Причина для этого в другом виде описана здесь: http://umumble.com/blogs/Programming/321/

Они называются условиями йоды.

Идея состоит в том, что если вы сначала поместите значение (например, false, null, true или что-то короткое), человеку становится легче сканировать отчет и быстро понять намерение этого условия.

Кроме того, что сказал мишу 🙂

Если вы случайно напишете:

 if (null = $this->user) { ... } 

вы получите синтаксическую ошибку.

Если вы случайно напишете:

 if ($this->user = null) { ... } 

вы будете искать причину странного поведения вашего приложения в течение длительного времени.