2010-11-16 118 views
4

如果我有产生上述通知的代码,以及类似的例如未定义的数组的偏移量,将会添加isset()empty()检查除了重新提供错误通知外,还会提高脚本的性能吗?试图获得非对象的属性和类似的错误 - 性能如何?

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

回答

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 
+0

这可能足以只关闭通知(例如E_ALL&〜E_NOTICE为的error_reporting)。 – kapa 2010-11-16 11:49:40

+0

@bazmegakapa的确,尽管出于安全和性能原因,应该在生产中关闭所有错误。 – lonesomeday 2010-11-16 11:56:26

+0

@lonesomeday如何做对象?例如,我尝试用'''if($ res-> data){......}'''。但它没有奏效。我应该使用'''if(isset($ res-> data))'''?我使用PHP 5.6。 – 2016-01-07 05:35:23

1

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

此外,如果您不关心变量是否设置,您不妨使用@。 (take a look here in case you don't know what @ is

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

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

1

我敢打赌,最大的性能影响将是Apache将这些错误写入文件。警告生成本身不应该太昂贵,但您可以通过使用xdebug或类似的配置来检查代码。

相关问题