2010-10-11 17 views
6

我一直在爲PHP編寫一個解析器,並且在解決一些第三方代碼的同時,遇到了一個關於[]運算符的奇怪案例。從PHP數組讀取時,[]意味着什麼?

通常情況下,[]使用沒有意義「作爲最後的元素」爲賦值左側的鍵。

$a = array(); 
$a[] = 1; 

將在數組$ a的末尾加1。

在上述代碼,雖然,我看到了這樣一行:

$r =& $a[]; 

當我試圖刪除&,我得到了一個相當預期的致命錯誤:

​​

隨着&儘管如此,PHP並沒有抱怨。表達式的含義是什麼

& $a[]; 

回答

12

的語法是指「使用引用到$一個[]」或到最新創建的數組元素的引用。

<?php 
$a=array(); 
$a[] = "a"; 
$a[] = "b"; 

print_r($a); 

$r =& $a[]; 

print_r($a); 

$r = "c"; 

print_r($a); 

生產:

Array 
(
    [0] => a 
    [1] => b 
) 
Array 
(
    [0] => a 
    [1] => b 
    [2] => 
) 
Array 
(
    [0] => a 
    [1] => b 
    [2] => c 
) 
+19

現在我們知道它的含義了,讓我們都承諾永遠不要使用它。 – webbiedave 2010-10-11 17:45:43

+0

我們必須的確如此。 :-) – Yiannis 2010-10-11 18:11:23

1

我的猜測是,它增加了一個空元素的陣列,並給出$ R對該數組元素的引用。你確定$ a應該是一個數組嗎?它也可能試圖使用[]語法訪問字符串的字符,在這種情況下,我不知道如何工作。