2013-11-15 74 views
5

我很想知道在PHP中的以下行爲是否打算。而且,如果有意的話,通過創建一個索引來初始化一個null變量的數組是可以接受的(就像在第一個代碼片段中完成的那樣)?PHP未定義的索引通知沒有引起索引空變量

error_reporting(E_ALL); 
$arr = null; 

echo ($arr["blah"]===null) ? "null" : $arr["blah"]; 

$arr["blah"] = "somevalue"; 
echo "<br>"; 
echo ($arr["blah"]===null) ? "null" : $arr["blah"]; 
var_dump ($arr); 

此輸出

null 
somevalue 

array (size=1) 
    'blah' => string 'somevalue' (length=9) 

然而,如果數組首先被初始化(見下面的代碼),我得到完全相同的輸出,而是被賦予了「未定義指數」的通知,當我第一次嘗試​​

error_reporting(E_ALL); 
$arr = array(); 

echo ($arr["blah"]===null) ? "null" : $arr["blah"]; 

$arr["blah"] = "somevalue"; 
echo "<br>"; 
echo ($arr["blah"]===null) ? "null" : $arr["blah"]; 
var_dump ($arr); 
+0

它的目的,但高度disrecommended。這是過去的遺留問題,而不是任何應該用於良好代碼的東西。始終在使用前初始化您的變量。 –

+3

你應該看看函數isset(),is_null()和empty()。歡迎來到鬆散的類型,隱含的幾乎所有的地獄。 – Sammitch

+0

我可能不完全理解這個問題,然而當「分配」時,我會使用'='運算符而不是檢查===或===的條件語句嗎?國際海事組織,你不能通過條件作爲'回聲' –

回答

-1

如果數組爲空,PHP將不會嘗試進行比較。

在第二種情況下,因爲數組已設置,所以會發生比較。 PHP不檢查它是否爲空。

你的三元試圖訪問變量$ arr [「blah」],而不是在比較之前檢查它是否被設置。

正確的方式來寫,這將是:

error_reporting(E_ALL); 
$arr = array(); 

if(isset($arr["blah"])) echo ($arr["blah"]===null) ? "null" : $arr["blah"]; 

$arr["blah"] = "somevalue"; 
echo "<br>"; 
if(isset($arr["blah"])) echo ($arr["blah"]===null) ? "null" : $arr["blah"]; 
var_dump ($arr);