PHP 参数通过 ref => 分配给 ref = NULL


PHP param by ref => assign to ref = NULL

通过引用对象方法传递参数时,我发现了一种奇怪的行为:

class Test
{
    private $value;
    public  function Set($value)
    {
        $this->value = $value;
    }
    public  function Get(&$ref)
    {
        $ref = &$this->value; //SET REF PARAMETER TO THIS VALUE BY REF
    }
}
$test = new Test();
$test->Set('test');
$test->Get($value1);
var_dump($value1); //NULL INSTEAD OF 'test'!

编辑:本例的 GetByRef(...) 名称错误,重命名为:Get(...)

edit2:我忘记了我卡住的真实测试用例:

$test->Get($value1);
$test->Get($value2);
$value1 = 'Another test value';
echo $value2; //SHOULD BE SAME: 'Another test value';

$value 2 不知道是否创建了 value1,因此标准 $value 2 = &$value 1 在这里不起作用。

您正在通过引用分配给引用。这就是为什么你会得到null.如果您正常分配,它工作正常:

public function GetByRef(&$ref) {
    $ref = $this->value;
}

通过在方法签名中声明&$ref并调用该方法,将在调用作用域中创建一个默认值为 null 的变量,该变量在方法内部引用为 $ref 。通过执行$ref = &$this->value,您基本上删除了该引用并创建了一个新的引用$ref。使用 =& 始终创建一个新的引用变量;如果要更改其值,则必须使用 = 为其赋值。因此,在调用作用域中创建的变量仍设置为其初始值null,并且它对方法内部$ref的引用被破坏。