【发布时间】:2012-07-20 02:22:02
【问题描述】:
首先 - 我的英语很糟糕,所以我希望你能理解。我有涉及嵌套对象结构上的方法链接的问题。
我正在尝试创建某种列表,其中包含动态创建的对象和子列表。到目前为止,我有这个代码:
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); 我在输出中得到 recursion 时,我不知道这是否是我的对象结构的某种问题。
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
(
........
)
)
)
)
谢谢
【问题讨论】:
-
你的脚本能运行多久?为什么会导致泄漏?
-
@zerkms 我已经编辑了我的问题。希望您能解释 RECURSION 问题。谢谢
-
从英语的角度来看,这篇文章最糟糕的部分是你的第一句话。 “我的英语不好”是不正确的用法。其次,如果你说英语比母语者好,说“我的英语不好”,就会给人一种居高临下和冒犯的印象。我不知道为什么这么多非母语人士坚持使用这个短语。
标签: php oop inheritance method-chaining