2016-09-22 57 views
2

一個學習PHP的人給了我一些讓我撓頭的代碼。他越來越$_POST輸入,將它放在變量,然後:empty()如何處理布爾表達式?

if(!empty($id && $name && $email)) { 
    //do something 
} 

我的第一個傾向是,通過多個變量作爲自變量將拋出一個錯誤,但它成功地計算。我不正確empty()不應該採取布爾表達式?或者 - 如果我是對的 - 它爲什麼會起作用?

+0

從5.5開始,'empty'可以接受一個表達式而不僅僅是一個變量,但這仍然是編寫該代碼的一種非常奇怪的方式。 – iainn

+1

這與'if($ id && $ name && $ email)' – AbraCadaver

+0

@iainn相同謝謝 - 我沒有意識到更新[empty()支持任意表達式](http://php.net/manual/ EN/migration55.new-features.php)。你也是對的,這很奇怪!我不是唯一指出他是非常規的。 – lookdad

回答

3

可以傳遞一個表達式empty,而不是一個變量(自PHP 5.5),但像你失去使用empty的利益半表達。 empty檢查變量是否設置以及評估其「真實性」。當你給它一個這樣的表達式時,表達式中的單個變量是而不是檢查存在empty。該表達式僅作爲布爾值進行計算。

所以,如果你使用的不同empty檢查,你會得到檢查存在變數以及檢查,他們是!= false

if(!empty($id) && !empty($name) && !empty($email)) 

但是當你使用

if (!empty($id && $name && $email)) 

你會如果所有變量都已設置並且具有非假值,則仍然進入if塊,但如果未設置任何變量,則會得到未定義的變量通知。它基本上不使用empty可言,這樣同樣的事情:

if ($id && $name && $email) 

但是,如果你的男人是從$_POST設置這些變量,他們設置,(如果他們在$_POST沒有他」 d那時得到未定義的索引警告),而且這裏的empty毫無意義。