试图获得非对象的属性,以及类似的错误 - 性能受到影响?

时间:2010-11-16 10:39:25

标签: php performance

如果我有代码产生上述通知,并且类似于数组的未定义偏移量,除了重新传输错误通知之外,添加isset()empty()检查是否会提高脚本的性能?

编辑:只是为了澄清,我想要错误报告,我知道isset会绕过通知,这个问题更多的是关于性能方面。

3 个答案:

答案 0 :(得分:5)

首先,我假设你有3个选择。

第一个是关闭error_reporting并使用未知阵列偏移而不受惩罚:

error_reporting(0);

第二种是使用@错误抑制:

@$my_array['a'];

第三个是使用isset()

if (isset($my_array['a'])) {
    $my_array['a'];
}

我已经攻击a quick benchmarking script,它为1000000次执行提供了以下结果:

Turning off error reporting:  6 seconds
Using error suppression:     18 seconds
Using isset():                9 seconds

答案 1 :(得分:1)

您唯一需要的是检查您的变量是否使用isset()进行设置,因为这会删除您的通知。我相信如果您计划使用任何可能未定义的变量,这样做是很好的做法。

另外,如果您不关心设置的变量,也可以使用@。 (take a look here in case you don't know what @ is

我不认为会有任何显着的性能差异(如果有微观优化),但我相信如果没有显示错误/通知/警告,会有很大的视觉改善。

关于隐藏错误/通知/警告,take a look here

答案 2 :(得分:1)

我敢打赌,最大的性能打击将是Apache将这些错误写入文件。警告生成本身不应该太昂贵,但您可以通过使用xdebug或类似的方式分析您的代码来确定。