使用 `if ($a != NULL)` 还是 `if ($a !== NULL)` 来控制程序流程?

6

这可能是一个非常基本的问题,但我想了解使用PHP的如果相同 !== 如果相等!= 来控制流程时的性能问题。

考虑以下微不足道的PHP函数:

<?php
 function test_json($json = NULL) {
  if ($json != NULL) {
   echo 'You passed some JSON.';
  } else {
   echo 'You failed to pass any JSON.';
  }
 }
?>

从性能角度来看,是否最好使用 if identical (!==) 来防止 PHP 迭代变量类型,试图找到一个有效的比较?
我认为 !== 首先比较变量类型,如果失败,它会立即返回 FALSE
自 PHP3 以来,我一直使用 !=,几乎成了一种反射。现在我正在处理一些更加计算密集型的项目,微小的性能考虑变得更加重要。
当然,欢迎对流程控制优化进行其他评论!

1
当性能成为真正的问题时,请尝试进行性能分析。相比于函数调用,这一点并不重要。 - mario
@mario 是的。我只是对比较运算符感到好奇,因为当我在编写一个函数时,这个想法突然浮现在我的脑海中(质疑我的习惯)。 - msanford
2个回答

9

我没有对松散比较运算符和严格比较运算符进行过任何性能测试,但是针对您想要实现的功能,我建议使用类似于以下的方法:

if (!is_null($json)) {
    do_stuff()
}

更多关于is_null()的信息,请参考http://www.php.net/manual/en/function.is-null.php

编辑:在我上面提到的php页面的评论中,有一些结果显示===运算符比==运算符略快,两者都比is_null()快。然而,另一个注释指出,“===NULL和is_null之间的执行时间差异小于250纳秒。去优化一些重要的东西吧。” 我认为这是有道理的。所以,总的来说,建议您选择最易读的方式。


1
在循环中进行一百万次比较,将一个值与NULL=====is_null()相比较的测试中,我发现=====大致相同,===稍微快一些,而is_null()需要大约两倍的时间。然而,出于个人喜好,我仍然更喜欢is_null(),因为NULL == NULL应该是false(但实际上不是),而is_null()捕捉到了这个概念。 - zrvan
关于 NULL == NULL 的优秀观点。我倾向于在可能的情况下包含语言中的函数,原因正是如此:它们很可能会正确处理我从未想过的奇怪边角情况,这意味着以后需要进行更少的调试。 - Michael Fenwick
性能方面不说,使用 isset($json) 而不是 !is_null($json) 怎么样?并且避免使用否定表达式。 - MrWhite
isset()is_null是逻辑上的相反,因此两者都可以很好地工作,尽管我不确定它们在性能方面如何比较。在这一点上,我认为它主要取决于风格和在给定上下文中哪个更清晰,以确定使用哪个更好。 - Michael Fenwick

-1

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