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我编辑了我的问题。希望您能解释递归问题。从英语角度来看,这篇文章最糟糕的部分是你的第一句话。“我的英语不好”是不正确的用法。第二,如果你的英语比以英语为母语的人用得好,并且说“我的英语不好”,这会给人一种居高临下和冒犯的感觉。我不知道为什么这么多非母语人士坚持使用这个短语。