2012-06-26 62 views
2

我想知道是否有一個更優雅的方式來做到這一點:尋找元素(如果存在)

$foo = (isset($bar) and array_key_exists('meh', $bar)) ? $bar['meh'] : ''; 

如果我刪除isset部分,PHP會發出警告,如果$bar不一個數組,如果我除去array_key_exists部分,那麼如果meh鍵不在數組中,PHP會發出警告。是否有更優雅,無警告的方式來達到同樣的目的?

+0

這就是我該怎麼做 –

+0

我這樣做...但它作爲一個函數...哦和默認值(可能並不總是希望空字符串...可能需要0或null或空對象等等)。 – Brian

回答

2

您完全採取必要的步驟來針對您提到的警告「保護」代碼。

但是,警告是有原因的。通常情況下,檢查是否更有意義,如果可以防止您嘗試訪問的變量未初始化的情況。

+0

+1表示您已知道您的數據。這並沒有真正回答這個問題,但這個建議本身非常有價值。 PHP社區經常採用防禦性編程(在您嘗試處理或隱藏所有錯誤的位置),但調試*無效輸入時失敗的*攻擊性程序通常要容易得多。 –

+0

採取了點。初始化變量而不是抑制錯誤。 – Roscius

2

您可以直接引用密鑰。在isset裏面,如果$ bar沒有定義,它甚至不會拋出異常。

$foo = isset($bar['meh']) ? $bar['meh'] : ''; 

array_key_existsisset之間的區別是,isset會如果鍵對應返回FALSENULL值。在我上面的代碼中,NULL值將因此導致$foo開始空字符串,而不是NULL。如果這是一個問題,你現在的做法將是最好的。