前回の記事では、Smartyもどきのテンプレートエンジンを10行で作る方法を紹介しました。今回は extract() を使用しない、よりシンプルな形にまとめてみました。
【補足】
前回の記事で紹介した方法では extract() を使用していましたが、この関数は連想配列を単独変数に展開するため、実行速度・メモリの消費・既存変数との衝突、といった点で不利な傾向がありましたので、本記事での方法をおすすめします。
WEB上のファイル構成
Webフォルダ
|
+-- class/
| |
| +-- MyTemplate.class.php (1)
|
+-- template/
| |
| +-- sample.tpl.html (2)
|
+-- sample.php (3)
全部で3ファイルです。上のファイルから順に解説します。
10行テンプレートエンジン
class/MyTemplate.class.php(UTF-8)
<?php
class MyTemplate
{
function show($tpl_file)
{
$v = $this;
include(__DIR__ . "/../template/{$tpl_file}");
}
}
?>
- 指定されたテンプレートを展開するだけのシンプルなクラスです
- $v は、テンプレート側でデータ表示用の変数として使います
- PHP5.3未満の場合は、
__DIR__
の代わりにdirname(__FILE__)
を使って下さい
サンプル画面テンプレートファイル
template/sample.tpl.html(UTF-8)
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<h1>店名:<?php echo $v->name; ?></h1>
<ul>
<?php for($i=0; $i<count($v->foods); $i++){ ?>
<li><?php echo $v->foods[$i]; ?></li>
<?php } ?>
</ul>
</body>
</html>
- PHPコードが埋め込まれた、よくある形の html ファイルです
サンプル画面表示ファイル
sample.php(UTF-8)
<?php
include(__DIR__ . "/class/MyTemplate.class.php");
$tpl = new MyTemplate();
$tpl->name = '悟空軒';
$tpl->foods = array('ラーメン', '餃子', '焼き飯', '麻婆豆腐');
$tpl->show('sample.tpl.html');
?>
- 実際にブラウザーからアクセスするファイルです
- たとえば URL は、http://(あなたのサイト)/sample.php という感じになります
まとめ
テンプレートエンジンとはいえ、PHPの基本機能を使っただけのシンプルな作りです。
特別な機能は何もないため、そういう恩恵を受けるメリットはありません。
その代わり、Smartyやフレームワークを使うことによる以下のデメリットからは解放されます。
- フレームワーク固有の学習コスト
- フレームワークをバージョンアップしていく手間
- フレームワークと他のモジュールとの相性問題
- フレームワークのブラックボックス部分による制限
(・o・ゞ いじょー。