0
首先的 - 我的英语不好,所以我希望您能理解。我有问题涉及嵌套对象结构的方法链接。OOP在PHP方法链
我试图创造某种与动态创建本身的对象和子列表列表。到目前为止,我有这样的代码:
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();
我可以追加到$根字段对象(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
(
........
)
)
)
)
谢谢
你的脚本工作了多久?为什么它会导致泄漏? – zerkms 2012-07-20 02:51:52
@zerkms我编辑了我的问题。希望你能解释* RECURSION *问题。谢谢 – 2012-07-20 16:06:53
从英文角度来看这篇文章最糟糕的部分是你的第一句话。 “我的英文不好”是不正确的用法。其次,如果你比英语母语者使用英语更好,并且说“我的英语不好”,那么它就会变得居高临下,令人反感。我不知道为什么这么多非母语的人坚持使用这句话。 – 2012-07-20 16:10:04