我一直在为PHP写一个解析器,虽然搞乱了一些第三方代码,但我遇到了一个关于[]
运算符的奇怪案例。
通常情况下,[]
在分配左侧没有键的情况下使用,意思是“添加为最后一个元素”。
$a = array();
$a[] = 1;
将在数组$ a。
的末尾添加1在前面提到的代码中,我看到了这样的一行:
$r =& $a[];
当我试图移除&时,我得到了一个相当预期的致命错误:
致命错误:无法使用[]进行阅读
虽然使用&
,PHP根本不会抱怨。表达式是什么意思
& $a[];
答案 0 :(得分:12)
语法意味着“使用对$ 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
)
答案 1 :(得分:1)
我的猜测是它向数组添加了一个空元素,并为$ r提供了对该数组元素的引用。你确定$ a应该是一个数组吗?它也可能尝试使用[]语法访问字符串的字符,在这种情况下我不知道它是如何工作的。