【发布时间】:2016-04-16 14:30:21
【问题描述】:
我有一个关于 PHP 中的传递引用的问题。我在网上搜索过,但没有看到任何特定于此问题的内容。以下函数从数组中删除键并返回更新数组的值:
function array_fetch($k, array &$a){
if(isset($a[$k]) || array_key_exists($k, $a)){
$v = $a[$k];
unset($a[$k]);
return $v;
}
return null;
}
我使用的代码如下:
function foo(){
return ['a', 'b', 'c'];
}
$a = foo();
echo array_fetch(1, $a);
print_r($a);
b
数组 ( [0] => a [2] => c )
所以它就像一个魅力,现在我想让代码更短一点:
echo array_fetch(1, $a = foo());
print_r($a);
注意:在 ...
中只能通过引用传递变量 b
数组 ( [0] => a [1] => b [2] => c)
假设我给出一个变量作为参考,我错了吗?显然是这样,因为数组也没有改变,但我不明白为什么会发生这种情况。即使我用() 括起来表达式也无济于事。
更新:
一个可行的解决方法是使用这样的包装函数:
function &ref($var){
return $var;
}
echo array_fetch(1, $a = &ref(['a', 'b', 'c']));
print_r($a);
b
数组 ( [0] => a [2] => c )
【问题讨论】:
-
解决此问题的方法是先进行赋值,然后在函数调用中使用变量。
$a = foo(); echo array_fetch(1, $a);
标签: php pass-by-reference php-7