まず、PHPはテンプレート言語です。PHPベースのWebアプリケーションにテンプレートシステムを使用することについて話すときは、このことを覚えておいてください。
テンプレートエンジンを使用することについて私が今まで聞いた唯一の「本当の」議論は、PHPを知らず、信頼できないテンプレートデザイナーがいる場合に便利な、テンプレート操作用のより単純な言語を提供するというものでした。 PHPを慎重に使用する方法を学びます。
これらの議論に関して、テンプレート設計者がテンプレート設計に十分なPHPを学ぶ能力がない場合は、おそらく新しいテンプレート設計者を見つけることを検討する必要があると思います。さらに、PHP自体は、テンプレートとコードで使用する可能性のある制御ステートメントに異なる構文を提供します。例えば:
<? foreach($array as $key => $val): ?>
<?= $val ?>
<? endforeach; ?>
VS:
<?php
foreach($array as $key => $val) {
echo $val;
}
?>
個人的には、次の理由でテンプレートエンジンがPHPで発生したと思います。
- それは他の言語がそれをする方法です
- 優れたPHPプログラマーは、プレゼンテーションとアプリケーションのロジックを強制的に分離する方法が必要であり、テンプレートがこれを行う簡単な方法であることに気づきました。
最初の理由はちょっとばかげています。2番目の理由は、少しの自制心と、アプリケーションでレイヤーを分離する必要性についての基本的な理解でさえ克服できます。MVCデザインパターンは、この問題に取り組む1つの方法です。いくつかの自己制御を実行する限り、私のルールは、必要なループと、ステートメントが使用される場合、および画面の出力をフィルタリング、エスケープ、フォーマットする関数のみを使用することです。
Smartyを幅広く使用してきたので、正直なところ、解決策よりも乗り越えるためのハードルが常に高くなっていると言えます。どちらかといえば、PHPベースのテンプレートに切り替えることで、テンプレートとコードの両方の開発時間が実際に短縮されました。