You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP引用传递未达预期的原因及解决方法

PHP引用传递与返回引用的行为差异问题

先看这段PHP代码:

class FOO {
  public $v = [];

  function &refv1() {
     return $this->v[1];
  }
  function refv2(&$ref) {
    $ref = &$this->v[2];
  }
}
$FOO = new FOO();

// 这段代码正常工作
$acc = &$FOO->refv1();
$acc = '5';
echo $FOO->v[1]; // 输出 5

// 这段代码无法生效
$bcc = null;
$FOO->refv2($bcc);
$bcc = '10';
echo $FOO->v[2]; // 未被设置!

上述两种方式逻辑相近,第一种通过返回引用的方式能够正常修改数组元素,但第二种通过传递引用并在函数内为其赋值引用的方式却无法生效。请问这是为什么?如何让传递的引用像第一个函数那样成为数组的访问器?


答案与解释

PHP的引用语法存在特殊的行为逻辑,并非直观的“引用传递”。你可能会觉得像下面这样的代码:

$c = &f();
function &f() {
  return $a[b];
}

等同于$c = &$a[b];,但实际上它的行为更接近:

$a[b] = &$temp;
$c = &$temp;

回到原问题,要让第二个函数的行为与第一个一致,需要修改refv2函数:

function refv2(&$ref) {
  $ref = $this->v[2];
  $this->v[2] = &$ref;
}

内容的提问来源于stack exchange,提问作者rhavin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:43:24