まず第一に、私の英語は下手なので、ご理解いただければ幸いです。ネストされたオブジェクト構造のメソッドチェーンに関する質問があります。
その場で自分自身を作成するオブジェクトとサブリストを使用して、ある種のリストを作成しようとしています。これまでのところ、私はこのコードを持っています:
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
(
........
)
)
)
)
ありがとうございました