2012-06-01 3 views
8

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

Что такое разница между следующими утверждениями «если»? :

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

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

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

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

ответ

13

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

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

if (null == $this->user) 

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

($this->user = null) 

вместо

($this->user == null) 

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

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

Обновление: так как я вижу, что по этой теме еще есть активность даже через 3 года после того, как я отправил ответ, d Я хотел бы добавить то, о чем я забыл упомянуть. Этот тип обозначений известен как yoda conditions, вы можете узнать больше об этом на this wikipedia page, например.

+1

Спасибо! Dead simple, но не смог найти ответы ... – alchemication

+0

@alchemication Я рад, что это помогает, это был хороший вопрос +1 – mishu

+0

также звучит как по-настоящему веская причина использовать 'is_null ($ var)' или '! Is_null ($ var) 'когда это возможно и практично. Вынимает догадки. – RockyFord

1

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

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

1

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

1

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

1

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

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

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

1

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

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

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

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

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

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

+0

Хорошо, спасибо большое. Это именно то, что я искал! – alchemication

4

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

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

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

if (10 = $var) { } 

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

if ($var = 10) { } 

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

+0

Ну, имеет смысл, я думаю, что Eclipse использовал для выделения одного выражения «=» в if в качестве ошибки для меня, но Net Beans не ... поэтому может быть полезно как хорошая практика, спасибо! – alchemication

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