2015-08-26 37 views
1

我正在閱讀PHP食譜,在關於表單的章節中有這樣的內容:這是如何評價爲真?

問題:您想確保爲表單元素提供了值。例如,您要確保文本框未留空。

於是筆者闡述這樣:

// Making sure $_POST['flavor'] exists before checking its length 
    if (! (filter_has_var(INPUT_POST, 'flavor') && 
     (strlen(filter_input(INPUT_POST, 'flavor')) > 0))) { 
     print 'You must enter your favorite ice cream flavor.'; 
    } 

我不明白這「和」表達如何計算爲真。
是不是!(filter_has_var(INPUT_POST,'flavor')總是假?

+4

'!'操作符應用於整個'(... && ...)'表達式。這有效地否定它:「如果它不存在或是一個空字符串」 – zerkms

+1

如果你合適的代碼,你將不會得到這些類型的錯誤 –

回答

0

filter_has_var(INPUT_POST, 'flavor')將確保形式發送flavor交變量

strlen(filter_input(INPUT_POST, 'flavor')) > 0將確保flavor交變量是""(空字符串)

!操作者施加到整個表達式使用()和將比其他確保這兩個條件都是錯誤的,因爲它是真的。

1

關鍵是括號的順序。檢查我放在相應括號下的克拉標誌:

(!(filter_has_var(INPUT_POST,'flavor') && (strlen(filter_input(INPUT_POST,'flavor'))>0))) 
^                    ^

所以它實際上檢查:"if not both are true"

你可以重寫這"if X is not true or Y is not true"像這樣:

(!filter_has_var(INPUT_POST,'flavor') || !strlen(filter_input(INPUT_POST,'flavor')) > 0) 

在我看來這最後一個版本是更具可讀性,所以我真的喜歡它。

+0

哇謝謝,就是這樣。我被書籍識別欺騙了!是的,當試圖理解這一點時,我用'或'重新編寫了它,而且確實更具可讀性。 – Marconato

+0

@Marconato - 如果你喜歡這個答案,你可以通過點擊左邊的複選標記來接受它。:-) – kramer65