PHPでDOM APIを扱ってみる

  • PHP
  • 現在地

PHPでのドキュメントオブジェクトの作成

PHP5でDOM(Document Object Model)操作を行う場合、まずドキュメント(文書)自体を表す DOMDocument クラスをインスタンス化して、ドキュメントオブジェクトを作成する必要があります。

  • $dom = new DOMDocument();

これで空のドキュメントオブジェクトが作成されることになり、ここからは JavaScript のようにオブジェクト指向プログラミングでDOM操作が行えるはずです。(当然クラスやメソッドに違いはありますが。)

PHPでのDOMに関するプロパティやメソッド、オブジェクトとなる他のクラスについてはPHP公式マニュアルのDOMのページ「PHP: DOM - Manual」にて確認できます。

PHP5でDOMを利用する際に最低限必要なことはこれだけなので、試しに JavaScript で使用している要素・属性の設定用関数を、PHP用に書き直してみることにしました。

例題(要素・属性の設定用関数)

下のコードは、要素を作成する際に属性をいちいち設定するのが面倒で作成した JavaScript 用の関数で、a には要素名を、b には属性と内容を連想配列で引数として渡すことにより、設定済みの要素オブジェクトを返すものです。

2013年02月06日 現在使用している下記の関数は、再帰処理を行うように変更したため、内容が異なります。

JavaScript
  • function elem_create(a,b){
    • var e = document.createElement(a);
    • if(b instanceof Object){
      • for(var i in b){
        • e[i] = b[i];
      • }
    • }
    • return e;
  • }

リクエスト例: elem_create('p',{innerHTML:'サンプル',className:'bold',id:'sample'})

この関数をPHP用に書き直すとこのようになります。

PHP版
  • function elem_create($dom,$a,$b){
    • $e = $dom->createElement($a,$b);
    • if(func_num_args()>2){
      • $attr = func_get_arg(2);
      • foreach($attr as $i=>$v){
        • $e->setAttribute($i,$v);
      • }
    • }
    • return $e;
  • }
出力までの一例
  • $dom = new DOMDocument();
  • $dom->appendChild(
    • elem_create(
      • $dom,'p','サンプル',array('class'=>'bold','id'=>'sample')
    • )
  • );
  • echo $dom->saveHTML();

PHPでは、innerHTML は使用できないので、要素の内容は第3引数 $b とし、属性は連想配列で第4引数に渡すことにしました。

PHP用に書き直してみると、PHPではドキュメントオブジェクトを作成する必要があるため、関数内で DOMDocument クラスのメソッドを利用する場合は、オブジェクトも引数として渡すことになってしまいました。

このままでも機能は変わらないので問題はないのですが、DOMDocument クラスを継承したクラスを作成し、その中に関数をメソッドとして定義することで、引数にする手間を省くこともできます。

その場合は、関数内の $dom を $this に書き換えて、DOMDocument クラスの代わりに継承したクラスを new でオブジェクト化して、メソッドとして関数を利用してください。

関連ページ : PHPでクラスを利用するための基礎知識

それにしても、例題にした自作の関数をPHP用に書き換えてみましたが、DOMとは関係ない部分で別物になってしまいました。

スポンサードリンク

inserted by FC2 system