使用或不使用函数返回引用

时间:2016-08-30 10:49:24

标签: php syntax return-by-reference

通过引用获取值的两种方法之间是否存在实际差异?

方式1

<?php
class foo {
    public $value = 42;

    public function &getValue() {
        return $this->value;
    }
}

$obj = new foo;
$myValue = &$obj->getValue();
// $myValue is a reference to $obj->value, which is 42.
$obj->value = 2;
echo $myValue;
// prints the new value of $obj->value, i.e. 2.
?>

方式2

<?php
class foo {
    public $value = 42;
    public function getValue() {
        return $this->value;
    }
}

$obj = new foo;
$myValue = &$obj->value;
$obj->value = 2;
echo $myValue; 
?>

在这两种情况下都会打印 2 。那么为什么需要 getValue()函数呢?第一个示例取自PHP Manual

1 个答案:

答案 0 :(得分:0)

如果类字段没有修饰符'public',则需要第一种方法。在这种情况下,您无法获得类外部字段的引用。见例:

<?php

class foo
{
    protected $value = 1;

    public function setValue($value)
    {
        $this->value = $value;
    }

    public function &getValue()
    {
        return $this->value;
    }
}

$obj = new foo;
$myValue = &$obj->getValue();
$obj->setValue(2);
echo $myValue;
?>