'false === $var' 和 '$var === false' 有什么区别?

3

哪个更易读?起初,我不喜欢使用false ===的方法,但是随着我越来越频繁地看到它,我开始逐渐接受它。我相信它们返回的结果是相同的。


我猜这就像是说如果 x = y 那么 y = x - JCOC611
5
第二个容易被误输入为一个赋值语句而不会引起错误。 - David Thomas
1
http://wiert.me/2010/05/25/yoda-conditions-from-stackoverflow-new-programming-jargon-you-coined/ - Dogbert
2
好老的Yoda - vascowhite
我看到我错了,它们并不总是返回相同的结果,这破坏了x = yy = x的类比。 - Nick Pickering
3个回答

9

没有任何功能上的区别。

我通常更喜欢先放置变量,再放置常量值。因为这样更有意义(当你大声说出来时,你会说“我测试变量为假”吗?还是说“我测试假等于变量”?)


1
+1,我喜欢你对“代码就是其声音之佳者”的看法。 - Alain Tiemblo
1
现代集成开发环境(IDE)会在您在if语句中使用赋值操作时提醒您,因此将常量放在前面的唯一用例迅速减少。 - Sven
这取决于你是否是《星球大战》的粉丝:“如果 false 是值…” - David Thomas

6

我非常喜欢

false === $var

由于有时仅使用等式而非寻找标识,因此需要注意。在这种情况下,您需要编写以下内容:
false == $var

但有时候你可能状态不佳,写出来的内容可能会...
false = $var

这将立即报错,并让你立即修复问题。

但是,如果你输入以下内容:

$var = false

你最终会花费一个小时去试图弄清楚为什么你的脚本不能正常工作,这让你感到很沮丧。


1
一个好的集成开发环境(IDE)可以解决这个争论。 - Madara's Ghost
代码应该独立于集成开发环境(IDE)可访问。 - Nick Pickering
我不喜欢 false == $var,我更喜欢 ! $var。只使用三重等号来与布尔常量进行比较。 - fred727

2

比我更优秀的软件工程师曾经教过我这个技巧。简而言之,将常量放在第一位是最佳实践,尽管刚开始可能看起来有些奇怪。我认为这是最佳实践,因为它可以产生最可预测的结果:

$var = null;

if (false === $var) {   // NullPointerException is not thrown; only evaluates to "true" if the value "false" was assigned to $var
    ...
}

if ($var === false {    // NullPointerException will be thrown
    ...
}

if (false = $var) {     // Parse Error
    ...
}

if ($var = false) {     // the value false is assigned to $var
    ...
}

2
我们正在讨论PHP,那里没有NullPointerExceptions。 - Sven
但是这个概念仍然适用。 - Nick Pickering

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接