PHP - reversed order in if statement

2019-02-16 19:02发布

This is a question that is bugging me for a long time and can't find any answer... Noticed it's used quite a lot by Zend Framework Developers,

What is the difference between following 2 "if" statements? :

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

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

To me the first one looks kinda odd ;]

Thanks for answer.

7条回答
兄弟一词,经得起流年.
2楼-- · 2019-02-16 19:33

If you accidentally write:

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

you will get a syntax error.

If you accidentally write:

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

you will be searching for a reason of strange behavior of your application for a long time.

查看更多
家丑人穷心不美
3楼-- · 2019-02-16 19:34

This is not a difference for the way your script works, it's just a coding standard, a recommendation

The reason why it is recommended to use it this way:

if (null == $this->user)

is the fact that if you mistype and write = instead of == you will get an error, while

($this->user = null)

instead of

($this->user == null)

works but causes weird bugs (assignment and the final value is evaluated as bool instead of comparison)

and I guess it just extended as a habit to the strict comparison operator (===)

Update: since I see that there's still some activity on this thread even 3 years after I posted the answer I figured I would add something I forgot to mention. This type of notation is known as yoda conditions, you can read more about it on this wikipedia page for example.

查看更多
▲ chillily
4楼-- · 2019-02-16 19:37

Such order of elements in comparison I think is meant to prevent accidental assignment in if statements.

查看更多
家丑人穷心不美
5楼-- · 2019-02-16 19:38

These are called yoda conditions.

The idea is that if you put the value first (such as false, null, true or anything short) it becomes easier for a person to scan the statement and quickly understand the intention of the condition.

Also, what mishu said :)

查看更多
我想做一个坏孩纸
6楼-- · 2019-02-16 19:39

The result will be the same, however, the second is logical. You want to check if the variable is NULL, not if NULL is the variable... The reason for doing it the other way around is described here: http://umumble.com/blogs/Programming/321/

查看更多
Evening l夕情丶
7楼-- · 2019-02-16 19:40

There is no difference in order when comparing values.

It may be easier for someone to read or write such a code, but to me it's the same as writing from right to left.

查看更多
登录 后发表回答