Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:存储和/或传递对类的引用_Php_Class_Variables_Storage_Pass By Reference - Fatal编程技术网

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”)将导致在非对象上调用的方法出现致命错误