5

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

if (null == $var) {

}

if ($var == null) {

}

我经常看到编码人员更喜欢这种方式,是因为速度差异吗?

更新:

对不起,我没有把我的问题说清楚,我想知道的不是 and 之间的区别==,而是像and这样的===表达式,所以我改变了代码示例。null == $var$var == null


结论

没有功能或性能差异。有些人认为这是一种最佳实践,或者只是一种编码风格。顺便说一句,它有一个很酷的名字:尤达条件 :)

仅供参考:PHP 错误消息使用这种风格,例如

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

不知道为什么这个问题被标记为重复(The 3 different equals)而不是('false === $var'和'$var === false'有什么区别?

4

3 回答 3

12

它可以防止导致非常难以调试的错误的拼写错误。那是为了防止你不小心写=而不是==

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了条件,并且丢失了变量的值,而且你不会轻易找到它。

于 2013-10-14T01:13:40.040 回答
2

我认为下面的代码会解释它:

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”,因此我们在第一行得到的“真实”

于 2013-10-14T01:15:53.927 回答
0

将此结果与ifs 进行比较。

 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这是非常有趣的讲座;)

于 2013-10-14T01:08:19.900 回答