如果我有產生上述通知的代碼,以及類似的例如未定義的數組的偏移量,將會添加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