2011-05-10 87 views
1

我想用這樣的代碼:沒有定義奇怪的空問題

$arr=array('a'=>$a); 

$a,所以我得到的錯誤。但如果我之前寫這個代碼

if (!isset($a)) 
$a=null; 

所有的作品。爲什麼? $a開頭沒有定義,所以$a=null。或underfined!=NULL

+0

嘗試'var_dump($ a)'; – diEcho 2011-05-10 07:25:31

+0

我收到未定義的變量 – kusanagi 2011-05-10 07:26:39

+0

是您的錯誤只是一個通知? – 2011-05-10 07:27:58

回答

6

當你寫

array("a"=>$a) 

這意味着你想要的關鍵「一」是指一個名爲變量引用$一個不首先存在這樣你得到一個錯誤;但是當你添加

$a=null; 

手之前,雖然你設置$一個爲空,但實際上你正在創建一個名爲$多數民衆贊成由PHP已知的所以不會有錯誤的變量引用。

+2

換句話說,PHP有一個包含所有變量及其值的內部表(實際上,幾個表對於每個函數範圍都有一個表,但除此之外)。當你的代碼對某個變量做某些事情時,PHP會在表中查找它的值。如果它不在那裏,你會得到錯誤,並且該值被假定爲'null'。但是'$ a = null'將變量名添加到表中,並將該值明確地設置爲'null'。 – 2011-05-10 07:36:23

-1

看到manual of isset

返回true變種存在,並且具有比其他NULL值 ,FALSE 否則。

+0

爲什麼downvote ???請解釋 – diEcho 2011-05-10 07:51:56

3

是的,說實話undefined!= null,雖然差別只在PHP的眼睛,當它決定是否拋出異常與否。否則,它是一回事。

3

正如您已經發現undefined與null不同。

未定義表示名稱$ a尚未納入函數/代碼的範圍。 $a=null是分配給變量的(否)值。

順便說一句,你應該得到一個通知,而不是一個錯誤,因爲使用未定義的變量作爲右值php警告你可能的錯字,並繼續腳本執行。作爲一個經驗法則,如果您在賦值(=)simbol(左值名稱)的左側處理一個未定義的變量,則php會創建一個新變量名稱並將其綁定到當前作用域中,如果參考是在右邊(你使用的是包含的值而不是變量本身)PHP警告你並繼續前進。您可以通過error_reporting函數更改此行爲。