11

这是一个困扰我很长时间并且找不到任何答案的问题......注意到它被 Zend Framework 开发人员使用了很多,

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

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

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

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

感谢您的回答。

4

7 回答 7

16

这与您的脚本工作方式没有区别,它只是一个编码标准,一个建议

推荐这样使用的原因:

if (null == $this->user)

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

($this->user = null)

代替

($this->user == null)

有效但会导致奇怪的错误(赋值和最终值被评估为布尔而不是比较)

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

更新:因为我发现即使在我发布答案 3 年后,该线程上仍有一些活动,所以我想我会添加一些我忘记提及的内容。这种类型的符号称为 ,例如yoda conditions,您可以在此 wikipedia 页面上阅读更多相关信息。

于 2012-06-01T11:52:17.040 回答
5

这是写if陈述的好习惯。考虑这段代码:

if (10 == $var) {
  echo 'true';
} else {
  echo 'false';
}

如果您忘记了一个等号:

if (10 = $var) { }

然后PHP会产生解析错误,所以你知道你错过了一个=,你可以修复它。但是这段代码:

if ($var = 10) { }

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

于 2012-06-01T12:08:10.037 回答
2

这些被称为尤达条件。

这个想法是,如果您将值放在首位(例如 false、null、true 或任何简短的内容),则人们更容易扫描语句并快速理解条件的意图。

另外,米舒说的:)

于 2012-06-01T11:53:01.760 回答
1

比较值时顺序没有区别。

有人读或写这样的代码可能更容易,但对我来说这和从右到左写是一样的。

于 2012-06-01T11:50:17.440 回答
1

我认为这种元素的比较顺序是为了防止 if 语句中的意外分配。

于 2012-06-01T11:52:04.507 回答
1

结果将是相同的,但是,第二个是合乎逻辑的。您想检查变量是否为 NULL,而不是 NULL 是否是变量...此处描述了相反的原因: http ://umumble.com/blogs/Programming/321/

于 2012-06-01T11:52:14.793 回答
1

如果你不小心写了:

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

你会得到一个语法错误。

如果你不小心写了:

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

您将长时间寻找应用程序异常行为的原因。

于 2012-06-01T11:55:42.657 回答