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

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

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

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

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

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

$r =& $a[];

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

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

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

& $a[];

?

Ответ 1

Синтаксис означает "использовать ссылку на $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
)

Ответ 2

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