Markup

Component (その他のパーツ)

Author : trashtoy

Table of Contents

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 に含まれるノード一覧を改行文字区切りで出力します. 以下にサンプルコードを掲載します.

  1. $p       new Peach_Markup_ContainerElement("p");
  2. $p->append("Sample paragraph");
  3. $text    new Peach_Markup_Text("Sample text");
  4. $comment new Peach_Markup_Comment();
  5. $comment->append("Sample comment");
  6.  
  7. $nodeList new Peach_Markup_NodeList();
  8. $nodeList->append($p);
  9. $nodeList->append($text);
  10. $nodeList->append($comment);
  11.  
  12. $builder new Peach_Markup_DefaultBuilder();
  13. echo $builder->build($nodeList);
  14. /*
  15. Output:
  16. <p>Sample paragraph</p>
  17. Sample text
  18. <!--Sample comment-->
  19.  */

append した場合

Container の append() メソッドの引数に指定された場合, その NodeList に含まれる子ノードが追加されます. NodeList 自身は追加されません. 以下にサンプルコードを掲載します.

  1. $p       new Peach_Markup_ContainerElement("p");
  2. $p->append("Sample paragraph");
  3. $text    new Peach_Markup_Text("Sample text");
  4. $comment new Peach_Markup_Comment();
  5. $comment->append("Sample comment");
  6.  
  7. $nodeList new Peach_Markup_NodeList();
  8. $nodeList->append($p);
  9. $nodeList->append($text);
  10. $nodeList->append($comment);
  11.  
  12. $div new Peach_Markup_ContainerElement("div");
  13. $div->append($nodeList)// この行は以下の記述と全く結果になります
  14.  
  15. $div new Peach_Markup_ContainerElement("div");
  16. $div->append($p);
  17. $div->append($text);
  18. $div->append($comment);

None

None は文字通り「何もない」ことをあらわす Component です. このクラスはいわゆる Null Object として機能します. 例えば返り値に Component を返す関数を実装する際に, 適切な返り値がなかった場合の例外値として null や false などを返す代わりに None オブジェクトを返すようにすると良いでしょう.

build した場合

DefaultBuilder で build した場合は空文字列を返します. DebugBuilder で build した場合は文字列 "None" を生成します.

append した場合

Container に append した場合は何も処理が行われず, Container の状態は変化しません.