PHP - if语句中的逆序

alc*_*ion 9 php zend-framework coding-style

这是一个困扰我很长时间的问题,无法找到任何答案......值得注意的是,Zend Framework Developers使用了很多,

以下2"if"语句之间有什么区别?:

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

if ($this->user === null) { ... }
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的回答.

mis*_*shu 14

这不是您的脚本工作方式的差异,它只是一个编码标准,一个推荐

建议以这种方式使用它的原因:

if (null == $this->user)
Run Code Online (Sandbox Code Playgroud)

事实是,如果你输入错误并写入=而不是==,那么你将得到一个错误

($this->user = null)
Run Code Online (Sandbox Code Playgroud)

代替

($this->user == null)
Run Code Online (Sandbox Code Playgroud)

工作但导致奇怪的错误(赋值和最终值被评估为bool而不是比较)

我猜它只是作为一种习惯延伸到严格的比较运算符(===)

更新:因为我发现即使在我发布答案3年后,这个帖子上仍然有一些活动,我想我会添加一些我忘记提及的内容.这种表示法被称为yoda conditions,您可以在此维基百科页面上阅读更多相关信息.


flo*_*ree 5

这是撰写声明的好习惯if。考虑这段代码:

if (10 == $var) {
  echo 'true';
} else {
  echo 'false';
}
Run Code Online (Sandbox Code Playgroud)

如果您忘记了一个等号:

if (10 = $var) { }
Run Code Online (Sandbox Code Playgroud)

然后 PHP 将生成解析错误,因此您知道您错过了一个错误=并且可以修复它。但是这段代码:

if ($var = 10) { }
Run Code Online (Sandbox Code Playgroud)

将分配 10$var并始终评估为真实条件。无论 的内容是什么$var,上面的代码总是会回显“true”,并且很难找到这个错误。