Design Patter by PHP[7]: Builder

Date
2006-12-03 (Sun)
Category
Design Pattern

第七回目は Builder です。

Class Diagram: Builder Pattern

また今回は、Browser から実行できるようにしてみました。以下を試してみてください。

Builder Pattern

コードはいつも通り、Subversion のレポジトリにあります。

http://svn.nydd.org/dpxphp/Builder/

今回の気づき

PHP の DOM 関数の注意

動作確認に使用したのは、PHP Version 5.1.2 / libxml 2.6.16 のようです。

PHP の DOM 関数では、独立した (DOMDocument に append されていない) DOMElement には appendChild できない。

どういうことか。以下のコード参照。

<?php
$domdoc = new DOMDocument();
$html = new DOMElement('html'); $head = new DOMElement('head'); $title = new DOMElement('title', 'WTF');
$head->appendChild($title);
$domdoc->appendChild($html); $html->appendChild($head); ?>

上記コードは、動かない。実行すると 8行目で 'No Modification Allowed Error' というエラーが出る。理由はよくわかりませんが… しかし独立していなければ、DOMElement も appendChild できる、ということは、下のように実行順序を変えるだけでこのコードは動く。

<?php
$domdoc = new DOMDocument();
$html = new DOMElement('html'); $head = new DOMElement('head'); $title = new DOMElement('title', 'WTF');
$domdoc->appendChild($html); $html->appendChild($head); $head->appendChild($title); ?>

もうちょっと書き方を変えると、以下のようにも書ける。

<?php
$domdoc = new DOMDocument();
$html = new DOMElement('html'); $head = $html->appendChild( new DOMElement('head') ); $title = $head->appendChild( new DOMElement('title', 'WTF') ); ?>

最後のが一番シンプルな気もするけれど、場合によりけりでしょう。一番意味の通るものを使うべきだと思います。

この Design Pattern by PHP シリーズがいつも参考にしているのは以下の本です。

Comment:0

Comment Form

Remember Me?


Trackback:0

TrackBack URL for this entry
http://blogs.grf-design.com/mt/mt-tb.cgi/198
Listed below are links to weblogs that reference
Design Patter by PHP[7]: Builder from The Croton

Return to Page Top