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