PHP速度:什么更快? if(isset($ foo))或if($ foo == true)

时间:2010-03-05 20:30:36

标签: php optimization performance

我只是想优化我的代码。 我需要使用数据库中的数据预填充表单,我需要检查变量是否存在以填充文本框(我不喜欢隐藏@错误)。 表单非常长,然后我需要多次检查变量是否存在。

以下两个中哪个更快?

  • if (isset ($item))
  • if ($item_exists==true)

甚至

  • if ($item_exists===true)

6 个答案:

答案 0 :(得分:26)

使用for循环重复10000000次相同的脚本:

  • if (isset ($item)) 2.25843787193
  • if ($item_exists==true) 6.25483512878
  • if ($item_exists===true) 5.99481105804

所以我可以告诉isset肯定会更快。

答案 1 :(得分:11)

在这种情况下,您不应该首先询问性能,而应该询问正确性。因为isset的行为不像布尔转换并且与 true 比较(参见type comparison table)。特别是值""(空字符串),array()(空数组),false0"0"0作为字符串)处理方式不同。

答案 2 :(得分:7)

我确信性能存在差异;我确定它已在某处进行了基准测试;但我也确定它对于现实世界的目的来说根本不重要。任何可实现的增益都在这里以毫秒为单位,更重要的是代码的可读性,以及避免警告(无论是否输出,都会产生性能)。

如果您无法确定在访问它时设置了它,则可能需要isset。如果===总是一个布尔值,则不需要类型安全比较$item_exists,但它也不会有害。因此,根据您的情况,您可能需要

if ((isset($item)) and ($item_exists === true))

答案 3 :(得分:1)

要回答,最有可能是isset()和“===”将是最快的,因为他们只检查一个条件,其中==检查多个条件并且更慢。我没有正式测试过这个,但我认为是对的。 @Pekka也是正确的,如果你想要优化,这些真的不会在你做的地方。因为它可能需要数千次调用才能注意到几毫秒的差异。

答案 4 :(得分:-1)

只有一种方法可以优化代码,称为“分析”。首先你必须知道代码的哪个部分需要优化。然后才运行测试,找到解决方案等。

Marcx的答案中的“盘旋”方法也很糟糕。如果您想测试任何代码是否真正有所不同,请使用Apache基准实用程序从浏览器的角度对其进行测试。

答案 5 :(得分:-1)

我会建议以下替代方案:

if (@$item)
if (@$item_exists)