Component (その他のパーツ)
Component の概要
Element, Text, Comment などのクラスは Node インタフェースを実装していますが, Node にはさらに Component という親のインタフェースが存在します.
Component とは Builder で build したり, 要素の中に append したりすることが可能なインタフェースです. Node とは Component の中でも特にマークアップ言語のパーツとしてツリー構造を構成することが出来る型を指します.
このページでは Component を実装しているその他のクラスについて紹介します.
Container
Container は Component を継承したサブインタフェースで, 内部に子ノードを持つことが出来る Component をあらわします. append() や getChildNodes() などのメソッドを持ちます.
このインタフェースを実装したクラスとして ContainerElement, Comment, 後述の NodeList などがあります.
NodeList
NodeList はノードの順序付き集合をあらわすクラスです. DOM における NodeList と NodeFragment を兼任するような役割を持ちます.
build した場合
DefaultBuilder の build() メソッドの引数に指定した場合, NodeList に含まれるノード一覧を改行文字区切りで出力します. 以下にサンプルコードを掲載します.
- $p->append("Sample paragraph");
- $comment->append("Sample comment");
- $nodeList->append($p);
- $nodeList->append($text);
- $nodeList->append($comment);
- echo $builder->build($nodeList);
- /*
- Output:
- <p>Sample paragraph</p>
- Sample text
- <!--Sample comment-->
- */
append した場合
Container の append() メソッドの引数に指定された場合, その NodeList に含まれる子ノードが追加されます. NodeList 自身は追加されません. 以下にサンプルコードを掲載します.
- $p->append("Sample paragraph");
- $comment->append("Sample comment");
- $nodeList->append($p);
- $nodeList->append($text);
- $nodeList->append($comment);
- $div->append($nodeList); // この行は以下の記述と全く結果になります
- $div->append($p);
- $div->append($text);
- $div->append($comment);
None
None は文字通り「何もない」ことをあらわす Component です. このクラスはいわゆる Null Object として機能します. 例えば返り値に Component を返す関数を実装する際に, 適切な返り値がなかった場合の例外値として null や false などを返す代わりに None オブジェクトを返すようにすると良いでしょう.
build した場合
DefaultBuilder で build した場合は空文字列を返します. DebugBuilder で build した場合は文字列 "None" を生成します.
append した場合
Container に append した場合は何も処理が行われず, Container の状態は変化しません.
- Prev: Builder (出力制御)
- Next: Helper / HelperObject