LoginSignup
75
77

More than 5 years have passed since last update.

[PHP] 続・PHPテンプレートエンジンを10行で自作する

Last updated at Posted at 2016-01-02

前回の記事では、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・ゞ いじょー。

参考URL

75
77
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
75
77