Php 尝试获取非对象的属性,以及类似的错误-性能命中?

Php 尝试获取非对象的属性,以及类似的错误-性能命中?,php,performance,Php,Performance,如果我有生成上述通知的代码,以及类似的代码,例如数组的未定义偏移量,那么除了删除错误通知之外,添加isset()或empty()检查还会提高脚本的性能吗 编辑:我只是想澄清一下,我想要错误报告,我知道isset将绕过通知,这个问题更多的是关于性能方面。您需要做的唯一一件事是检查您的变量是否使用isset()设置,因为这将删除您的通知。我认为,如果您计划使用任何可能未定义的变量,那么这样做是一种良好的做法 此外,如果您不关心是否设置了变量,那么最好使用@。() 我不认为会有任何显著的性能差异(如果

如果我有生成上述通知的代码,以及类似的代码,例如数组的未定义偏移量,那么除了删除错误通知之外,添加
isset()
empty()
检查还会提高脚本的性能吗


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

您需要做的唯一一件事是检查您的变量是否使用
isset()
设置,因为这将删除您的通知。我认为,如果您计划使用任何可能未定义的变量,那么这样做是一种良好的做法

此外,如果您不关心是否设置了变量,那么最好使用
@
。()

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


关于隐藏错误/通知/警告,.

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

首先,我假设您有3种选择

第一种方法是关闭
错误报告
并使用未知数组偏移量而不受惩罚:

error_reporting(0);
第二种方法是使用
@
错误抑制:

@$my_array['a'];
第三种是使用
isset()

我已经破解了1000000次执行的结果如下:

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

仅关闭通知可能就足够了(例如,用于错误报告的E_ALL&~E_通知)。@bazmegakapa True,但出于安全和性能原因,应在生产中关闭所有错误。@lonesomeday如何对对象执行此操作?例如,我尝试使用
if($res->data){……}
。但它不起作用。我应该使用
if(isset($res->data))
?我使用的是PHP5.6。
Turning off error reporting:  6 seconds
Using error suppression:     18 seconds
Using isset():                9 seconds