Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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中带有方法链接的OOP_Php_Oop_Inheritance_Method Chaining - Fatal编程技术网

PHP中带有方法链接的OOP

PHP中带有方法链接的OOP,php,oop,inheritance,method-chaining,Php,Oop,Inheritance,Method Chaining,首先,我的英语不好,所以我希望你能理解。我的问题涉及嵌套对象结构上的方法链接 我正在尝试创建一种列表,其中包含动态创建的对象和子列表。到目前为止,我有以下代码: interface IData {} class root { public function __construct( root $proxy = null ) { $this->proxy = $proxy; } public function __destruct() {

首先,我的英语不好,所以我希望你能理解。我的问题涉及嵌套对象结构上的方法链接

我正在尝试创建一种列表,其中包含动态创建的对象和子列表。到目前为止,我有以下代码:

interface IData {}


class root {
    public function __construct( root $proxy = null ) {
        $this->proxy = $proxy;
    }
    public function __destruct() {
        if( !is_null( $this->proxy ) ) {
            unset( $this->proxy );
        }
    }
    public function OpenList() {
        $list = new field_list( $this );
        $this->data[] = $list;
        return $list;
    }

    public function CloseList() {
        return $this->proxy;
    }

    public function Add() {
        $this->data[] = new field();
        return $this;
    }


    private $proxy = null;
    private $data = array();
}

class field_list extends root implements IData {
    public function __construct( root $proxy ) {
        parent::__construct( $proxy );
    }
    public function __destruct() {
         parent::__destruct();
    }
}

class field implements IData {}
我使用的代码如下所示:

$root = new root();
$root->OpenList()->Add()->CloseList()->OpenList()->Add()->Add()->Add()->OpenList()->Add();
我可以附加到$root字段对象(
类字段
),但也可以打开新列表(
类字段_列表
),并将字段对象附加到上次打开的列表

我想知道我创建的对象引用(
$proxy
)是否会导致内存泄漏问题,以及此代码是否存在任何性能问题。(编辑:)当我<代码>打印时($root)我在输出中得到了递归,我不知道这是否是我的对象结构的某种类型的问题

root Object(
[proxy:root:private] => 
[data:root:private] => Array
    (
        [0] => field_list Object
            (
                [proxy:root:private] => root Object
  *RECURSION*
                [data:root:private] => Array
                    (
                        [0] => field Object
                            (
                            )

                    )

            )

        [1] => field_list Object
            (
                [proxy:root:private] => root Object
  *RECURSION*
                [data:root:private] => Array
                    (
                       ........
                    )

            )

    )

)

谢谢

我以前见过链式方法调用,我认为我从未遇到过任何问题。在内存泄漏方面,我怀疑有问题,因为不像C++语言或java语言,你不必处理内存。你已经注意写了一个析构函数,所以我怀疑会有问题


因为您只创建了一个实例,所以它应该只引用属性$proxy的一个实例,所以我认为这样可以。

您的脚本工作多长时间?为什么会导致泄密?@zerkms我编辑了我的问题。希望您能解释递归问题。从英语角度来看,这篇文章最糟糕的部分是你的第一句话。“我的英语不好”是不正确的用法。第二,如果你的英语比以英语为母语的人用得好,并且说“我的英语不好”,这会给人一种居高临下和冒犯的感觉。我不知道为什么这么多非母语人士坚持使用这个短语。