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