PHP - if语句中的逆序

时间:2012-06-01 11:47:27

标签: php zend-framework coding-style

这是一个困扰我很久的问题,找不到任何答案...... 注意到它被Zend Framework Developers使用了很多,

以下2个“if”语句之间有什么区别? :

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

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

对我而言,第一个看起来有点奇怪;]

感谢您的回答。

7 个答案:

答案 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) { ... }

你将长期寻找申请奇怪行为的原因。