表达式的操作数位置很重要?

时间:2013-11-16 08:39:37

标签: php

我知道,或者更好,我同意,对于速度性能在php中无关紧要,至少在大多数常见情况下都是如此。

但我想知道“if”“为什么”在if构造表达式

if("hello" === $var)

可能比

有更好的表现

if($var === "hello")

可能是因为在第一个例子中没有变量的内部类型转换?

我很确定我已经读过一些关于它的东西,但我再也找不到了。

2 个答案:

答案 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将报告错误。