[PHP]すごく簡単なテンプレートエンジン考えてみた
- 2007-06-02
- カテゴリ: Server Side
- タグ: PHP 安易な発想
function tpl($arg) {
static $vars = array();
if (is_array($arg)) {
$vars += $arg;
} else {
echo $vars[$arg];
}
}
[キー] => [値]の形式の配列を引数として渡したときは、静的変数に追記して、引数が文字列のときは、該当する静的変数の値をechoする。
使い方は↓。
//template.html
<html>
<head>
<title><?php tpl('title') ?></title>
</head>
<body>
<h1><?php tpl('h1') ?></h1>
<p><?php tpl('para') ?></p>
</body>
</html>
//main.php
<?php
tpl(array('title' => 'Title', 'h1' => 'H1'));
tpl(array('para' => 'Paragraph'));
require 'template.html';
テンプレートファイルの方を見てもらえばわかるとおり、普通に<?php ... ?>タグで囲ってあるだけ。しかも、それをrequireしているだけ。だから、関数やifなどは当然使える。
この関数がやっていることは、実は↓と大して変わらない。
<?php
$tplVars = array();
$tplVars['title'] = 'Title';
$tplVars['h1'] = 'H1';
$tplVars['para'] = 'Paragraph';
?>
<html>
<head>
<title><?php echo $tplVars['title'] ?></title>
</head>
<body>
<h1><?php echo $tplVars['h1'] ?></h1>
<p><?php echo $tplVars['para'] ?></p>
</body>
</html>
違うのは、
echo $tplVarsと書くべきところを短縮- 関数内などで実行すると、
$GLOBALS['tplVars'][...]などとしなければ行けない所を短縮 - 誤って
$tplVarsを上書きしてしまうリスクを低減
だけ。
少し洗練して、↓のような関数にしてみた。
function tpl_core($arg) {
static $vars = array();
if (is_array($arg)) { $vars += $arg; }
else { return isset($vars[$arg]) ? $vars[$arg] : ''; }
}
function tpl($nm) { echo tpl_core($nm); } //出力
function tplg($nm) { return tpl_core($nm); } //get
function tpls($nm, $val) { tpl_core(array($nm => $val)); } //set
使い道があるかどうかはわからないけど、場合によってはうまい使い方ができるかもしれない。
トラックバックURL
- http://liosk.blog103.fc2.com/tb.php/11-f8d7341c

