通过PHP中的引用调用内联传递

Xor*_*lse 0 php pass-by-reference php-7

我有一个关于PHP中的pass-by-reference的问题.我在网上搜索过,但看不到这个问题的具体内容.以下函数从数组中删除键并返回更新数组的值:

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;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码:

function foo(){
  return ['a', 'b', 'c'];
}

$a = foo();
echo array_fetch(1, $a);
print_r($a);
Run Code Online (Sandbox Code Playgroud)

b
数组([0] => a [2] => c)

所以它就像一个魅力,现在我想让代码更短一些:

echo array_fetch(1, $a = foo());
print_r($a);
Run Code Online (Sandbox Code Playgroud)

注意:只有变量应该通过引用传递给...
b
数组([0] => a [1] => b [2] => c)

假设我给变量作为参考,我错了吗?显然是这样,因为数组也没有改变,但我不明白为什么会发生这种情况.即使我用()它附上表达也无济于事.

更新:

一个可行的解决方法是使用这样的包装函数:

function &ref($var){
  return $var;
}

echo array_fetch(1, $a = &ref(['a', 'b', 'c']));
print_r($a);
Run Code Online (Sandbox Code Playgroud)

b
数组([0] => a [2] => c)

u_m*_*der 10

array_fetch(1, $a = foo());不是

分配$a并传递$a给函数.

分配$a并将赋值结果传递给函数.

assign操作结果是指定的值.

所以,array_fetch(1, $a = foo());相当于array_fetch(1, ['a', 'b', 'c'])第二个参数不是变量的地方.

所以,唯一的解决方案仍然是:

$a = foo();
echo array_fetch(1, $a);
Run Code Online (Sandbox Code Playgroud)