我想知道是否有一個更優雅的方式來做到這一點:尋找元素(如果存在)
$foo = (isset($bar) and array_key_exists('meh', $bar)) ? $bar['meh'] : '';
如果我刪除isset
部分,PHP會發出警告,如果$bar
不一個數組,如果我除去array_key_exists
部分,那麼如果meh
鍵不在數組中,PHP會發出警告。是否有更優雅,無警告的方式來達到同樣的目的?
我想知道是否有一個更優雅的方式來做到這一點:尋找元素(如果存在)
$foo = (isset($bar) and array_key_exists('meh', $bar)) ? $bar['meh'] : '';
如果我刪除isset
部分,PHP會發出警告,如果$bar
不一個數組,如果我除去array_key_exists
部分,那麼如果meh
鍵不在數組中,PHP會發出警告。是否有更優雅,無警告的方式來達到同樣的目的?
您完全採取必要的步驟來針對您提到的警告「保護」代碼。
但是,警告是有原因的。通常情況下,檢查是否更有意義,如果可以防止您嘗試訪問的變量未初始化的情況。
+1表示您已知道您的數據。這並沒有真正回答這個問題,但這個建議本身非常有價值。 PHP社區經常採用防禦性編程(在您嘗試處理或隱藏所有錯誤的位置),但調試*無效輸入時失敗的*攻擊性程序通常要容易得多。 –
採取了點。初始化變量而不是抑制錯誤。 – Roscius
您可以直接引用密鑰。在isset
裏面,如果$ bar沒有定義,它甚至不會拋出異常。
$foo = isset($bar['meh']) ? $bar['meh'] : '';
array_key_exists和isset之間的區別是,isset
會如果鍵對應返回FALSE
到NULL
值。在我上面的代碼中,NULL
值將因此導致$foo
開始空字符串,而不是NULL
。如果這是一個問題,你現在的做法將是最好的。
這就是我該怎麼做 –
我這樣做...但它作爲一個函數...哦和默認值(可能並不總是希望空字符串...可能需要0或null或空對象等等)。 – Brian