2014-09-27 72 views
-1

許多PHP開發人員編寫以下條件語句:PHP代碼中是否有冗餘條件?

if (isset($_POST['action']) and $_POST['action'] == 'someValue') { 
    something(); 
} 

這是什麼有用的寫這個條件語句?

當我看着它,它看來,如果$_POST['action'] == 'someValue' 意味着isset($_POST['action'] == TRUE

所以,似乎下面的條件語句會做同樣的:

if ($_POST['action'] == 'someValue') { 
     something(); 
} 
+0

如果未設置$ _POST ['action'],它會在錯誤日誌中寫入警告.check isset將避免產生該警告 – 2014-09-27 15:50:32

+0

您將通過第二種方法獲得未聲明的變量警告 – bansi 2014-09-27 15:51:42

回答

1

如果您只要致電:

if ($_POST['action'] == 'someValue') { 
    something(); 
} 

$_POST["action"]沒有設置,那麼默認的PHP行爲是抱怨undefined index,這將導致direct string output。 現在考慮如果你的PHP請求是關於發送一個JSON回客戶端......你的JSON將是一個malformed one

另一個問題,考慮以下因素:

if ($_POST['action'] == 'someValue') { 
    something(); 
} 
... 
header("Location: foo.php"); 

對不起,由於您的通知沒有機會約undefined index preceed頭,這是一個沒有沒有。它不起作用,因爲PHP的默認行爲(考慮錯誤報告爲ON)是以字符串格式吐出警告,從而混淆了腳本的流程。

當然,你可以沉默這些錯誤本:

if (@$_POST['action'] == 'someValue') { 
    something(); 
} 

但這同樣是一個不好的做法,它不使節目更好,但速度較慢,難以發現錯誤。

1

PHP發出通知,如果使用未定義的變量或指數。

該檢查是爲了防止它。

1

如果數組中的某個鍵不存在,PHP將觸發一條關於訪問它的通知。所以這不是多餘的,但它取決於您的設置,如果通知顯示。