PHP:存储和/或传递对类的引用

时间:2012-03-01 17:35:05

标签: php class variables storage pass-by-reference

鉴于以下结构:

class B 
{
    private $_b;
    private __constructor() { }

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

    public static function load( &$__b ) 
    {
        $B = new B();
        $B->_b = $__b;
        return $B;
    }
}
class A 
{
    private $_b;

    public function getB() 
    {
        return B::load( $this->_b );
    }

    public function save() 
    {
        $this->_b->save();
    }
}
$_SESSION['a'] = new A();

以下不起作用:

$b = $_SESSION['a']->getB();
$b->setValue( 'value' );
$_SESSION['a']->save();

但是,以下方法确实有效:

$_SESSION['a']->getB()->setValue( 'value' );
$_SESSION['a']->save();

我知道有人在这里会看到什么是错的,或者甚至不可能。

2 个答案:

答案 0 :(得分:1)

你到底想要达到什么目的?考虑到打开/关闭会话时发生的取消/序列化过程,您的测试是否正确?

这不应该奏效。 A::getB()不会更新A::_b中保留的引用。 B::load()通过引用接收数据,但不会将其重新分配给$B->_b。假设$__b本身就是一个对象,这将在PHP5中起作用。不是因为你通过引用将它传递给了load()函数 - 而是因为对象总是被引用处理。

也许你想详细说明你的代码示例。解释价值$_SESSION['a']如何成为一个好的开始。

答案 1 :(得分:0)

这个问题不需要,原帖中的代码完全按预期工作(通过引用传递),并允许存储在变量中。

我的问题是在构造函数中错误地修改了private $_b,这迫使它不能作为参考。