如果我有产生上述通知的代码,以及类似的例如未定义的数组的偏移量,将会添加isset()
或empty()
检查除了重新提供错误通知外,还会提高脚本的性能吗?试图获得非对象的属性和类似的错误 - 性能如何?
编辑:只是为了澄清,我想错误报告,我知道ISET会绕过通知,这个问题更多的是性能方面。
如果我有产生上述通知的代码,以及类似的例如未定义的数组的偏移量,将会添加isset()
或empty()
检查除了重新提供错误通知外,还会提高脚本的性能吗?试图获得非对象的属性和类似的错误 - 性能如何?
编辑:只是为了澄清,我想错误报告,我知道ISET会绕过通知,这个问题更多的是性能方面。
首先,我假设你有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
您唯一需要的就是检查您的变量是否使用isset()
设置,因为这样会删除您的通知。如果您打算使用任何可能未定义的变量,我相信这是很好的做法。
此外,如果您不关心变量是否设置,您不妨使用@
。 (take a look here in case you don't know what @ is)
我不认为会有任何显着的性能差异(作为微观优化,如果有的话),但我相信如果没有错误/通知/警告显示有巨大的视觉改善。
关于隐藏错误/通知/警告,take a look here。
我敢打赌,最大的性能影响将是Apache将这些错误写入文件。警告生成本身不应该太昂贵,但您可以通过使用xdebug或类似的配置来检查代码。
这可能足以只关闭通知(例如E_ALL&〜E_NOTICE为的error_reporting)。 – kapa 2010-11-16 11:49:40
@bazmegakapa的确,尽管出于安全和性能原因,应该在生产中关闭所有错误。 – lonesomeday 2010-11-16 11:56:26
@lonesomeday如何做对象?例如,我尝试用'''if($ res-> data){......}'''。但它没有奏效。我应该使用'''if(isset($ res-> data))'''?我使用PHP 5.6。 – 2016-01-07 05:35:23