2010-10-25 3 views
9

Я обычно пишу:PHP: порядок операторов сравнения нулевой

if ($myvar == null) 

но иногда я прочитал это:

if (null == $myvar) 

Я помню, кто-то сказал мне, что последний лучше, но я не» Не помню почему.

Знаете ли вы, что лучше и почему?

Спасибо, Dan

+1

Это дубликат http://stackoverflow.com/questions/271561/why-does-one-often-see-null-variable-instead-of-variable-null-in-c и многие другие – Harmen

ответ

11

Если вы случайно забыли один из =, второй будет давать ошибку.

if ($myvar = null) 

Это присвоит null к $myvar и выполнить if проверку на результат.

if (null = $myvar) 

Это будет пытаться присвоить значение $myvar для null и выдаст ошибку, потому что вы не можете назначить null.

+0

I видеть. В этом есть смысл. Благодаря! – Tom

1

Речь идет не о заказе, а об исключении случайного пропуска одного =, что приведет к присвоению вместо сравнения. При использовании соглашения с константой-первым случайное пропущение вызовет ошибку.

0

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

if($myvar = null) 

это всегда возвращает истину, в то время как

if(null = $myvar) 

выдаст ошибку.

+0

Нет, первый возвращает 'null', который вычисляет' false' в булевом преобразовании, поэтому это условие никогда не пройдет. Другая проблема заключается в том, что он также установит '$ myvar' в' null'. – lonesomeday

0

Вместо этого вы можете использовать is_null().

+0

Не то, о чем он просил, речь идет о порядке операндов. – fredley

0

Использование оператора присваивания = вместо оператора равенства == распространенная ошибка:

if($myvar = null) 

который фактически назначает null к $myvar. Один из способов получить эту логическую ошибку пойманным использовать константу на LHS, так что если вы используете = вместо == вы получите сообщение об ошибке, как константы (null в данном случае) не могут быть присвоены значения:

1

Что этот человек, возможно, намекнул на микро-оптимизацию относительно условных утверждений. Например, в следующем случае второе условие не будет оцениваться по мере того, как первое уже не выполнено.

if (1 == 0 && 1 == 1) 

Однако у вас всегда будет оценка. Поэтому порядок не имеет значения, и упомянутая конвенция уже есть путь.

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