这是一个困扰我很久的问题,找不到任何答案...... 注意到它被Zend Framework Developers使用了很多,
以下2个“if”语句之间有什么区别? :
if (null === $this->user) { ... }
if ($this->user === null) { ... }
对我而言,第一个看起来有点奇怪;]
感谢您的回答。
答案 0 :(得分:14)
这不是您的脚本工作方式的差异,它只是一个编码标准,一个推荐
建议以这种方式使用它的原因:
if (null == $this->user)
事实上,如果你输入错误并且写= =而不是==你会得到一个错误,而
($this->user = null)
而不是
($this->user == null)
工作但会导致奇怪的错误(赋值和最终值被评估为bool而不是比较)
我猜它只是作为一种习惯延伸到严格比较运算符(===)
更新:因为我发现即使在我发布答案3年后,这个帖子上还有一些活动,我想我会添加一些我忘记提及的内容。这种表示法称为yoda conditions
,您可以在this wikipedia page上阅读更多相关信息。
答案 1 :(得分:4)
编写if
语句是一种很好的做法。请考虑以下代码:
if (10 == $var) {
echo 'true';
} else {
echo 'false';
}
如果你忘了一个等号:
if (10 = $var) { }
然后PHP将生成解析错误,因此您知道错过了一个=
并且您可以修复它。但是这段代码:
if ($var = 10) { }
将10分配给$var
并始终评估为真实条件。无论$var
的内容是什么,上面的代码总是回显'真',而且很难找到这个错误。
答案 2 :(得分:2)
这些被称为尤达条件。
这个想法是,如果你把值放在第一位(例如false,null,true或者任何简短的值),那么一个人就可以更容易地扫描语句并快速理解条件的意图。
此外,mishu说:)
答案 3 :(得分:1)
比较值时,顺序没有差异。
有人可能更容易阅读或编写此类代码,但对我而言,这与从右到左书写相同。
答案 4 :(得分:1)
我认为这种元素的顺序是为了防止在if语句中意外分配。
答案 5 :(得分:1)
结果将是相同的,但是,第二个是合乎逻辑的。 你想检查变量是否为NULL,而不是NULL是变量... 这反过来的原因在这里描述: http://umumble.com/blogs/Programming/321/
答案 6 :(得分:1)
如果你不小心写了:
if (null = $this->user) { ... }
您将收到语法错误。
如果你不小心写了:
if ($this->user = null) { ... }
你将长期寻找申请奇怪行为的原因。