PHP:存储和/或传递对类的引用
鉴于以下结构:PHP:存储和/或传递对类的引用,php,class,variables,storage,pass-by-reference,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(); $
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();
我知道这里有人会看到哪里出了问题,或者如果这根本不可能的话。你到底想在这里实现什么?您的测试是否考虑了会话打开/关闭时发生的取消/序列化过程 这不应该奏效
A::getB()
不更新保存在A::\u b
中的引用B::load()
通过引用接收数据,但不以引用方式将其分配给$B->\u B
。假设$\uu b
本身是一个对象,这将在PHP5中工作。不是因为您通过引用将其传递给load()函数,而是因为对象总是以引用方式处理的
也许您需要详细说明您的代码示例。解释会话['a']的价值是如何产生的将是一个很好的开始。您在这里到底想要实现什么?您的测试是否考虑了会话打开/关闭时发生的取消/序列化过程 这不应该奏效
A::getB()
不更新保存在A::\u b
中的引用B::load()
通过引用接收数据,但不以引用方式将其分配给$B->\u B
。假设$\uu b
本身是一个对象,这将在PHP5中工作。不是因为您通过引用将其传递给load()函数,而是因为对象总是以引用方式处理的
也许您需要详细说明您的代码示例。解释值
$\u SESSION['a']
是如何产生的将是一个很好的开始。这个问题不需要,原始帖子中的代码完全按照预期工作(通过引用传递),并允许存储在变量中
我的问题是在构造函数中错误地修改了
private$\b
,这迫使它不能作为引用。这个问题是不需要的,原始帖子中的代码完全按照预期工作(通过引用传递),并允许存储在变量中
我的问题是在构造函数中错误地修改了
private$\u b
,这迫使它不能作为引用。我添加了如何创建$\u会话['a']
。这在以前确实有效,而引用之所以有效,是因为它是使用引用创建的。底层的\u b
是所有需要作为引用的部分,类本身不需要。抱歉,但是$a=new a()$b=$a->getB()$b->设定值(“v”)
将导致在非对象上调用方法时出现致命错误。我添加了创建会话['a']
的方法。这在以前确实有效,而引用之所以有效,是因为它是使用引用创建的。底层的\u b
是所有需要作为引用的部分,类本身不需要。抱歉,但是$a=new a()$b=$a->getB()$b->设定值(“v”)代码>将导致在非对象上调用的方法出现致命错误。