PHP中!isset()和===null的性能比较

7

我知道isset()和empty()的基准测试,但是我有一些需要在参数为空时才执行的代码。这是一个会被多次执行的函数,所以我想进行优化。

我知道isset()比empty()更快,但是!isset()和=== null呢?我知道变量将存在,因此我只需要将其与null进行测试。

我在考虑!操作符可能带来的惩罚。

1个回答

13

我觉得让别人来测试这个有点懒,所以我自己尝试了一百万次迭代。

两者之间的差异微不足道,因此使用!isset()是一个更好的选择,因为如果变量未定义,===null会抛出一个错误。

一百万次迭代:

   !isset()  .1118
   === null  .1046

顺便提一下,对于"!"运算符也有一个(同样微不足道的)惩罚。

   isset()  .1118
   !isset() .1203

2
是的,=== null 更快,但如果该值未设置,则会引发错误。但是,如果您在脚本开始时将变量设置为 null(因此您确定变量将具有值或 null),则可以使用比较运算符,这更快。但差异真的很小,最好选择代码可读性。 - vdegenne
3
虽然我没有进行基准测试,但从理论上讲,当检查多个必需变量时,isset() 在可读性方面也有额外的好处 - isset($a, $b, $c)仅在 所有 变量都被设置时返回 true,并在遇到任何未设置的变量时立即返回 false,从左到右进行检查。换句话说:isset() 可以用一个参数列表替换多个类似的 !== null 检查,并且对于可读性来说绝对更好。 - Claus Due

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