PHP - 成员封装返回奇怪的引用

时间:2008-11-18 22:16:23

标签: php reference

我有一个有私人成员$content的班级。这由get-method包装:

class ContentHolder
{
    private $content;
    public function __construct()
    {
        $this->content = "";
    }

    public function getContent()
    {
        return $this->content;
    }
}
$c = new ContentHolder();
$foo = array();
$foo['c'] = $c->getContent();

现在$foo['c']content的引用,这是我不明白的。我怎样才能获得价值?提前谢谢。

3 个答案:

答案 0 :(得分:5)

我刚刚尝试了您的代码,$foo['c']不是$content的引用。 (为$foo['c']分配新值不会影响$content。)

默认情况下,所有PHP函数/方法都按值传递参数并按值返回。要通过引用返回,您需要将此语法用于方法定义:

public function &getContent()
{
    return $this->content;
}

调用方法时的语法:

$foo['c'] = &$c->getContent();

请参阅http://ca.php.net/manual/en/language.references.return.php

答案 1 :(得分:3)

我不太了解你的问题。说你改变了:

public function __construct() {
    $this->content = "test";
}

$c = new ContentHolder();
$foo = array();
$foo['c'] = $c->getContent();

print $foo['c'];          // prints "test"
print $c->getContent();   // prints "test"

答案 2 :(得分:1)

在PHP中,你没有说:“$foo = new array();” 相反,您只需说:“$foo = array();

我运行了你的代码(PHP 5.2.6),似乎工作正常。我通过转储数组来测试它:

var_dump($foo);

输出:

array(1) {
  ["c"]=>
  string(0) ""
}

我也可以简单地使用echo

echo "foo[c] = '" . $foo['c'] . "'\n";

输出:

foo[c] = ''