2010-11-16 117 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或類似的配置來檢查代碼。

相關問題