在进行==和===比较时,变量的顺序是否重要?

时间:2013-10-14 01:04:26

标签: php comparison-operators

在进行比较时,在=====之后放置变量真的很重要吗?

if (null == $var) {

}

if ($var == null) {

}

我经常看到编码员更喜欢这种方式,是否适合速度差异?

更新

很抱歉,我没有明白我的问题,我想知道的不是=====之间的区别,而是null == $var$var == null之类的表达,所以我改变了代码示例。


Conslusion

没有功能或性能差异。有些人认为这是最佳做法或仅仅是编码风格。 BTW它有一个很酷的名字:Yoda条件:)

仅供参考:PHP错误消息使用此样式,例如

PHP Fatal error:  Cannot use isset() on the result of an expression (you can use "null !== expression" instead)

不知道为什么这个问题被标记为重复(The 3 different equals)而不是What's the difference between 'false === $var' and '$var === false'?

3 个答案:

答案 0 :(得分:5)

它可以防止导致调试错误的拼写错误。如果您不小心写了=而不是==,那就是

if ($var == null)  # This is true in case $var actually is null
if ($var =  null)  # This will always be true, it will assign $var the value null

相反,切换它们更安全:

if (null == $var)   # True if $var is null
if (null =  $var)   # This will raise compiler (or parser) error, and will stop execution.

使用此问题停止在特定行上的执行将使调试变得非常容易。另一种方法是相当困难,因为你可能会发现自己进入if条件,并且失去了变量的值,而你却很难找到它。

答案 1 :(得分:1)

我认为以下代码将解释它:

echo (( 0 == NULL ) ? "0 is null" : "0 is not null")  ."\n";
echo  (0 === NULL) ? "0 is null" : "0 is not null"  ;

它会输出:

0 is null
0 is not null

===运算符检查值和类型,但0是数字,而NULL是NULL类型

==运算符仅检查值,零可以转换为“false”或“null”,因此我们为第一行获得“truthy”

答案 2 :(得分:0)

将此结果与if s。

进行比较
 echo "Test '1abc' == 1 - ";
 if ('1abc' == 1) {
    echo 'ok';
 } else {
    echo 'fail';
 }

 echo "\nTest '1abc' === 1 - ";
 if ('1abc' === 1) {
    echo 'ok';
 } else {
    echo 'fail';
 }

然后阅读本页http://php.net/manual/en/language.types.type-juggling.php这是非常有趣的讲座;)