2012-06-13 72 views
1

如果訪問空引用的未定義索引,PHP不會引發任何錯誤。如果$array不是一個參考PHP會抱怨的第一行。未定義的索引,isset和PHP中的引用

爲什麼不參考?我是否需要爲空引用而煩惱isset,還是PHP在內部抱怨而不讓我知道?

+0

你引用的不是數組,所以我不認爲你問的是有道理的。 –

+0

糾正我,如果我錯了,但通過引用傳遞函數或循環正確? – David

+0

@Juan - 你是對的,未定義的索引是沒有意義的。儘管如此,我仍然期待一些E_NOTICE。未定義的變量可能?雖然'$ array'可能被設置爲類似於第1行上的'NULL',但是一旦創建了數組,它仍然會記住數組的深度,如第1行所定義的,這很有趣。 – velo9

回答

1

在你的代碼$array爲空。下面的代碼不會給你一個通知之一:

$b = null; 
if ($b['stuff']) echo 'cool'; 

這就奇怪了,this comment在文件指向的事實。

-2

爲什麼不只是做:

$array = array(); 
+0

我不想做任何事情,我只是對行爲感到好奇。 – velo9

+0

這是因爲您的錯誤報告設置稍高。在生產環境中,您可以禁用php錯誤。 – user962449

+0

我顯示所有的錯誤(這是發展)。 – velo9

1

您必須提高錯誤報告級別。你的例子$array['stuff']將會拋出有關找不到索引的警告。我經常與評價相結合的測試爲關鍵,以防止這些警告:

if(array_key_exists("blah",$arr) && strlen($arr['blah']) > 0) { 
    ; // do stuff here 
} 

我經常在數組名稱相結合的變量,因爲任何時候我不得不削減正複製粘貼代碼到下一節做同樣的事情,我寧願製作一個變量名稱數組,然後迭代變量名稱。最荒謬的條件是,當我有付款和發貨數據操縱,在那裏我將有一個數組變量名稱$BorS或只是$BS,然後在頂部,設置$BorS="shipping";與像真正有趣的陳述結束了:

${$BorS."data"}[${$BorS."_addr1"}]=$input_array[$BorS."_address_line_1"];