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

Другие вопросы по тегам