Что означает при чтении из массива PHP?

Я пишу парсер для PHP и, возившись с некоторым сторонним кодом, сталкиваюсь с странным случаем относительно оператора [] .

Обычно [] используется без ключа в левой части задания, означающего «добавить как последний элемент».

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

добавит 1 в конец массива $ a.

Однако в вышеупомянутом коде я видел такую ​​строку:

 $r =& $a[]; 

Когда я попытался удалить &, я получил довольно ожидаемую фатальную ошибку:

Неустранимая ошибка: нельзя использовать [] для чтения

С & хотя, PHP не жалуется вообще. В чем смысл выражения

 & $a[]; 

?

Синтаксис означает «использовать ссылку на $ a []» или ссылку на новейший созданный элемент массива.

 <?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 ) 

Я предполагаю, что он добавляет пустой элемент в массив и дает ссылку $ ra на этот элемент массива. Вы уверены, что $ a должен быть массивом? Он также может попытаться получить доступ к символу строки, используя синтаксис [], и в этом случае я понятия не имею, как это будет работать.