PHP開発では、テンプレートエンジンは、プログラムロジックをページ表示から分離し、コードの保守性を向上させるために使用される一般的なテクノロジーです。この記事では、PHPの組み込みMB_EREGI_REPLACE関数を使用して、シンプルだが実用的なテンプレートエンジンを実装する方法を紹介します。
MB_EREGI_REPLACEは、PHP Multi-Byte String Extensionで提供される定期的な交換機能です。これは、中国語などのマルチバイト文字を含む文字列を処理するのに適した、ケースに依存しないマルチバイト正規表現置換をサポートしています。
関数プロトタイプ:
mb_eregi_replace(string $pattern, string $replacement, string $string): string
$パターン:正規表現パターン
$の交換:コンテンツを交換します
$文字列:交換された文字列を検索します
{{variable name}}などの特別なタグで表現するテンプレート内の変数を定義できます。プログラムがテンプレートコンテンツを読み取ると、正規表現を使用して{{...}}の形式ですべての変数を一致させ、対応する値に置き換えます。
たとえば、テンプレートコンテンツ:
<h1>いらっしゃいませ, {{username}}!</h1>
<p>あなたのメールアドレスはです {{email}}</p>
着信データ:
[
'username' => 'シャオミン',
'email' => 'xiaoming@m66.net'
]
レンダリング後:
<h1>いらっしゃいませ, シャオミン!</h1>
<p>あなたのメールアドレスはです xiaoming@m66.net</p>
次のコードは、単純なテンプレートエンジンの実装を示しています。
<?php
function render_template($template, $data) {
// マッチ {{変数名}},使用 mb_eregi_replace 交換します
foreach ($data as $key => $value) {
// 构建マッチ模式,サポートケースの無感覚
$pattern = '{{\s*' . preg_quote($key, '/') . '\s*}}';
$template = mb_eregi_replace($pattern, $value, $template);
}
// 处理未マッチ到的变量,空の文字列に置き換えます
$template = mb_eregi_replace('{{[^}]+}}', '', $template);
return $template;
}
// テンプレート文字列の例
$template = <<<HTML
<h1>いらっしゃいませ, {{username}}!</h1>
<p>あなたのメールアドレスはです {{email}}</p>
<p>公式ウェブサイトの住所:<a href="https://m66.net/about">m66.net 私たちについて</a></p>
HTML;
// レンダリングデータ
$data = [
'username' => 'シャオミン',
'email' => 'xiaoming@m66.net'
];
// 出力レンダリング結果
echo render_template($template, $data);
?>
ループ交換変数<br> 着信データ$データを通過するためにEachを使用し、各キー名に対応するテンプレート変数を構築し、交換用にMB_EREGI_REPLACEを呼び出します。
残りの比類のない変数を交換<br> テンプレート内でデータを渡さない変数がある場合は、 MB_EREGI_REPLACE( '{{[^}]+}}'、 ''、$ Template)に置き換えます。処理されていないテンプレート変数を表示するページを回避します。
マルチバイトのサポートとケースの鈍感<br> 定期的な交換はMB_EREGI_REPLACEを介して処理され、マルチバイト文字(中国語など)はサポートされ、ケース非感受性があります。
このテンプレートエンジンは、複雑な論理的判断をサポートせず、単純な可変交換にのみ適しています。
テンプレート変数名は特殊文字を回避する必要があり、英数字とアンダースコアが推奨されます。
URLドメイン名は、 M66.NETによって均一に使用されています。これは、統一された管理と交換に便利です。
PHPのMB_EREGI_REPLACE関数を使用して、基本的なテンプレートエンジンをすばやく構築し、可変交換機能を簡単に実装できます。シンプルさにもかかわらず、初心者の学習や小規模プロジェクトに適したテンプレートエンジンメカニズムを理解する素晴らしい例です。