[PHP-users 2339] Re: PHP と JSPの比較

松嶋祥文 php-users@php.gr.jp
Sat, 29 Sep 2001 12:28:37 +0900


松嶋@ITBoost です。

私もデザインとロジックの分離には悩まされていますが、
工夫してなんとかやってみようとしています。

| FastTemplate ってあんな出来でなんでデファクトスタンダードなんでしょうか?
| 素人ではないにしても、到底まともなプログラマの仕事とは思えません。

実装はともかく、FastTemplate のように HTML に特殊なコメント
を埋め込む方式というのは、本当の意味でデザインとロジックが
分離できていない気がします。また、毎回 HTML を parse するの
は無駄ですので、あまり使おうという気になれませんでした。

そこで、HTML と PHP プログラムをマージするプログラムを作成し
ました。HTML ソース中の各タグに id 属性で固有の名前を付けて
おき、PHP プログラム側では一定のルールでタグに対する操作を別
ファイルに記述します。そして、前処理プログラムで HTML と PHP
をマージしたファイルを自動作成し、リクエストはマージされたファ
イルで処理するという方式で実験的に開発を行ってみています。

例えばこんな感じです。(Enhydra もどき?)

--- HTML ----
<table>
 <tr id="line" width="300">
   <td id="label" bgcolor="#cccccc"> label </td>
   <td id="data" bgcolor="#ffffff"> data </td>
 </tr>
</table>

--- PHP ---
//[line_start_pre]  <-- プログラムの配置個所指定
for($i=0; $i<count($array); $i++ ) {

//[label_replace]  <-- 要素の置き換え指定
  singleElement("label", '$i');

//[data_replace]
  singleElement("data", '$array[$i]');

//[line_end_post]
}

--- 前処理後 PHP(実際にはこのファイルでリクエストを処理) ---
<table>
<? for($i=0; count($array); $i++ ) { ?>
<tr id="line" width="300">
  <? print "<td id=\"label\" bgcolor="#cccccc">$i</td>"; ?>
  <? print "<td id=\"data\" bgcolor="#ffffff">$array[$i]</td>"; ?>
</tr>
<? } ?>
</table>


メリットは FastTemplate のように、リクエストの度に HTML ファイルを
読み込み、parse する必要がないことと、デザイナにはここのテーブルの
tr タグと td タグにはこういう id を埋めといてね、という指定だけで
済むことです。(このタグとこのタグの間にこのコメントを埋めて、とい
うように、実際の HTML ファイルやロジックを意識しなくてもかまいませ
ん)。

デメリットも、まぁ、いろいろあります。^^;
ただ、プログラマの負担が増えるのは仕方がないことかとおもっています。

実験的にやっているだけですので必要最小限の機能しかいれていないの
ですが、このような前処理方式の こなれた実装はどこかにないもので
しょうか?

-- 
                                               ,-------------+
+---------------------------------------------'              |
| 株式会社 IT Boost / アイティーブースト                     |
| 松嶋 祥文 [ mats@itboost.co.jp ]                ,-------------+
| +----------------------------------------------'              |
| | ★ Linux 関連の技術情報満載!    http://www.itboost.co.jp/  |
+-|   ★ 依頼・質問におこたえ!   http://okotae.itboost.co.jp/  |
  +-------------------------------------------------------------+