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