Что означает [] при чтении из массива PHP?
Я писал парсер для PHP и, возясь с каким-то сторонним кодом, столкнулся со странным случаем, касающимся []
оператор.
Обычно, []
используется без ключа слева от присваивания, означающего "добавить как последний элемент".
$a = array();
$a[] = 1;
добавит 1 в конец массива $a.
В вышеупомянутом коде я увидел строку, подобную этой:
$r =& $a[];
Когда я попытался удалить &, я получил довольно ожидаемую фатальную ошибку:
Неустранимая ошибка: невозможно использовать [] для чтения
С &
хотя PHP вообще не жалуется. В чем смысл выражения
& $a[];
?
2 ответа
Синтаксис означает "использовать ссылку на $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
)
Я предполагаю, что он добавляет пустой элемент в массив и дает ссылку $r a на этот элемент массива. Вы уверены, что $a должен быть массивом? Это также может быть попытка доступа к символу строки с использованием синтаксиса [], и в этом случае я понятия не имею, как это будет работать.