2013-12-24 17 views
0

使用isset是一個額外的函數調用,但仍然是推薦的做法。 在下面的特定例子中,什麼會更快?

我覺得第一個會更快。否則,是否有人可以說明爲什麼第二個會更快?

if (@$_REQUEST['x']=='1'): 
    define ('X','1'); 
else: 
    define ('X','0'); 
endif; 

//or 

if (isset($_REQUEST['x'])): 
    if ($_REQUEST['x']=='1'): 
     define ('X','1'); 
    else: 
     define ('X','0'); 
    endif; 
else: 
    define ('X','0'); 
endif; 
+8

抑制錯誤是一個壞主意。即使速度更快,也不要這樣做。 – Mike

+0

謝謝邁克。我知道推薦的方法是使用選項2.我確實指出了這一點。這個問題與PHP的工作方式有關。可能仍然是第二個(也是更好的)更快的方法?問題就在於此。 –

+1

可能會更快,是的。因爲PHP不必在每次迭代時發出通知或警告,然後抑制錯誤。 – Mike

回答

1

最佳做法決定避免抑制運算符,所以請使用isset()。如果您足夠關心微觀優化以考慮差異,則應該知道PHP即使未顯示也仍能處理被抑制的錯誤。理論上由@獲得的任何優化可能會由於錯誤處理而丟失。

最佳實踐還決定了從外部獲取輸入的特殊性。我還建議選擇$ _POST或$ _GET作爲替代品。

+1

PHP仍然處理被抑制的錯誤,即使它們沒有被顯示。理論上由@獲得的任何優化都可能因錯誤處理而丟失。「將爲您提供正確的答案。 –