Я пишу парсер для 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 должен быть массивом? Он также может попытаться получить доступ к символу строки, используя синтаксис [], и в этом случае я понятия не имею, как это будет работать.