【发布时间】:2011-10-22 23:17:19
【问题描述】:
我注意到 PHP 的 current() 和 key() 数组函数(与其他数组指针函数一样)通过引用获取数组参数:
混合当前(数组&$array)
每个数组都有一个指向其“当前”元素的内部指针,该元素被初始化为插入到数组中的第一个元素。
经过几次快速检查,current() 和 key()(与其他数组指针函数不同)似乎都按值接受数组参数,因此在传递函数的返回值。
我的结论是,这仅仅是因为 current() 和 key() 不尝试移动数组指针,因此不需要通过引用传递参数(或者在一些透明、安静的情况下这样做,隐秘的方式)。不过,这让我有点担心。
谁能确认这是否是预期的功能?我很乐意用它来获取返回数组的第一个元素/键,但 PHP 在几乎任何其他情况下允许发生致命错误(或严格标准警告 ) 用于将值传递给按引用参数。
功能还是错误?
例如:
error_reporting(-1);
function getArray(){
return array('a', 'b', 'c');
}
var_dump( current(getArray()) );
var_dump( key(getArray()) );
var_dump( next(getArray()) );
var_dump( prev(getArray()) );
var_dump( reset(getArray()) );
var_dump( end(getArray()) );
结果:
string(1) "a"
int(0)
Strict standards: Only variables should be passed by reference ...
string(1) "b"
Strict standards: Only variables should be passed by reference ...
bool(false)
Strict standards: Only variables should be passed by reference ...
string(1) "a"
Strict standards: Only variables should be passed by reference ...
string(1) "c"
【问题讨论】:
-
@ajreal - 不,第一个
array只是一个类型提示。请参阅php.net/manual/en/function.array-intersect-key.php 进行比较。 -
@ajreal - 也许我不明白,但
array &$array参数列表(据我所知)通过引用指示所需的数组。跨度>
标签: php arrays reference pass-by-reference