首先 - 我的英语很差,所以我希望你能理解。我有涉及嵌套对象结构上的方法链接的问题。
我正在尝试创建某种列表,其中包含动态创建的对象和子列表。到目前为止,我有这个代码:
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 字段对象 ( class field
),还可以打开新列表 ( class field_list
) 并将字段对象追加到最后打开的列表中。
我想知道我创建的对象引用 ( $proxy
) 是否会导致内存泄漏问题,以及此代码是否存在任何性能问题。(编辑:)当我在输出中print_r($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
(
........
)
)
)
)
谢谢