PHP参数由ref =>赋值给ref = NULL

时间:2014-04-02 09:49:23

标签: php reference

通过引用参数传递参数时,我发现了一个奇怪的行为:

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';

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

1 个答案:

答案 0 :(得分:4)

您通过引用分配参考。这就是你得到null的原因。如果正常分配,它可以正常工作:

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

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