[PHP]すごく簡単なテンプレートエンジン考えてみた

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[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>

違うのは、

  1. echo $tplVarsと書くべきところを短縮
  2. 関数内などで実行すると、$GLOBALS['tplVars'][...]などとしなければ行けない所を短縮
  3. 誤って$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

トラックバック

コメント

コメントの投稿

お名前
コメント
編集キー
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。