可能重复:
Why do some experienced programmers write comparisons with the value before the variable?
我对此很好奇:在我研究的大多数框架/开源项目中,我经常看到这样的代码...
<?php
if (null === self::$_instance) {
self::$_instance = new self();
}
特别是这一行...
if (null === self::$_instance) {
为什么在null
语句的第一个参数中使用if
而不是相反?...
if (self::$_instance === null) {
我意识到可能没有性能提升或类似的东西。这只是一种偏好还是我忽略了某种编码标准?
答案 0 :(得分:14)
它可以防止您意外地将值赋给变量,尤其是当仅使用松散类型比较(==
)时:
if (self::$_instance = NULL) { … } // WHOOPS!, self::$_instance is now NULL
这种条件通常称为yoda conditions。性能方面没有区别,两种陈述都是等价的。
答案 1 :(得分:6)
这主要是为了防止意外分配:
if (self::$_instance = null) ... //oops!
答案 2 :(得分:4)
没有明显的性能差异。以这种方式编写表达式的通常好处是防御性编程。我们希望避免意外使用赋值而不是相等比较:
if (self::$_instance = null) { ...
Woops!
答案 3 :(得分:3)
这可以帮助您正确使用代码。
如果你这样做,你的代码将会起作用,但效果将远远超出你想要的范围:
if (self::$instance = null) {
条件将始终失败(因为=
运算符返回值集,并且它是假的)但self::$instance
现在将设置为null
。这不是你想要的。
如果你这样做:
if (null = self::$instance) {
您的代码无法正常工作,因为您无法在作业的左侧使用null
(或任何文字,如字符串或整数)。只有变量可以是=
运算符的左侧。
因此,如果您将==
错误地输入为=
,则会出现解析错误,并且您的代码完全不起作用。这比一个神秘且难以追踪的错误更可取。
答案 4 :(得分:0)
null
并不特别 - 我看到很多程序员喜欢这样写出他们的表达方式:
if(8 == 4 * 2) {
这只是一种人们认为更清晰的偏好。