我知道,或者更好,我同意,对于速度性能在php中无关紧要,至少在大多数常见情况下都是如此。
但我想知道“if”和“为什么”在if构造表达式
if("hello" === $var)
可能比
有更好的表现 if($var === "hello")
可能是因为在第一个例子中没有变量的内部类型转换?
我很确定我已经读过一些关于它的东西,但我再也找不到了。
答案 0 :(得分:4)
这就是所谓的尤达符号。
正如Sanjog所提到的,它用于避免犯错误而不是验证平等。
但主要的问题是,这种方法在制作漂亮的代码方面并不是一个很好的做法。
“可读代码的艺术”一书对此有一个有趣的评论:
在某些语言(包括C和C ++,但不包括Java)中,将赋值放在if条件中是合法的:
if (obj = NULL) ...
很可能这是一个错误,而程序员实际上意味着:
if (obj == NULL) ...
为了防止这样的错误,许多程序员切换参数的顺序:
if (NULL == obj) ...
这样,如果
==
被意外写为=
,则表达式if (NULL = obj)
甚至不会编译。不幸的是,切换顺序会使代码看起来有点不自然。 (正如尤达所说的那样,“如果有什么可说的话,我就有。”)幸运的是,现代编译器警告if (obj = NULL)
之类的代码,所以“尤达符号”正在成为过去。
不幸的是,对于你来说,if中的赋值在PHP中不是非法的。
答案 1 :(得分:2)
差异如下:
if ($foo == 3) bar();
在这种情况下,如果我忘了a =它不会显示错误
if (3 == $foo) bar();
这样,如果你忘了a =,它就会变成
if (3 = $foo) bar();
并且PHP将报告错误。