PHPでは、 preg_replace_callback_array関数は、正規表現とコールバック関数に基づいてテキストを処理できる強力なツールです。この関数を巧みに利用することにより、変数とロジックをHTMLテンプレートに簡単に埋め込む簡単なテンプレートエンジンを実装できます。
この記事では、 preg_replace_callback_arrayを使用してシンプルなテンプレートエンジンを実装する方法について説明し、この関数を使用してテンプレート内のプレースホルダーを置き換える方法を示します。
preg_replace_callback_arrayは、正規表現ベースの置換操作を実行するPHPの関数であり、一致する各表現のコールバック関数を指定できます。コールバック関数は、一致するコンテンツに基づいてカスタマイズでき、最終的な交換結果を返します。
関数プロトタイプは次のとおりです。
preg_replace_callback_array(array $patterns_and_callbacks, string $subject);
$ patterns_and_callbacks :キーが正規表現であり、値がコールバック関数である配列。
$件名:処理する文字列。
テンプレート内の変数を置き換え、単純な条件付きロジックをサポートするシンプルなテンプレートエンジンを作成します。 preg_replace_callback_arrayを使用すると、この関数を簡単に実装できます。
テンプレート内のプレースホルダーが{{}}に包まれている単純なHTMLテンプレートがあるとします。
$template = "<h1>いらっしゃいませ,{{name}}!</h1><p>{{message}}</p>";
$variables = [
'name' => 'チャン・サン',
'message' => 'これが簡単なテンプレートエンジンの例です。',
];
preg_replace_callback_arrayを使用して、プレースホルダーの交換ルールを定義します。 2つの主要なタスクに対処する必要があります。
変数( {{{name}}} )を実際の値に置き換えます。
条件に応じて異なるコンテンツを表示するなど、カスタムロジックを処理します。
これらの機能を実装するには、適切な正規表現を構築し、各正規表現のコールバック関数を指定する必要があります。
以下は、テンプレートエンジンを実装するPHPコードです。
<?php
$template = "<h1>いらっしゃいませ,{{name}}!</h1><p>{{message}}</p>";
$variables = [
'name' => 'チャン・サン',
'message' => 'これが簡単なテンプレートエンジンの例です。',
];
// 使用 preg_replace_callback_array テンプレートエンジンを実装します
$patterns_and_callbacks = [
'/{{(.*?)}}/' => function ($matches) use ($variables) {
$key = $matches[1];
return isset($variables[$key]) ? $variables[$key] : '';
},
];
$output = preg_replace_callback_array($patterns_and_callbacks, $template);
echo $output;
$ patterns_and_callbacksアレイは、テンプレートのプレースホルダー( {{{name}}} )に一致する正規式/ {(. * ?) }/を定義します。
一致した各プレースホルダーについて、コールバック関数を介して$変数配列の実際の値に置き換えます。対応する変数が見つからない場合、コールバック関数は空の文字列を返します。
テンプレートエンジンを強化するために、特定の条件に基づいて特定のコンテンツを表示するかどうかを決定するなど、条件付きステートメントのサポートを追加できます。この関数を実装するには、 {{If condition}}と同様の構文を使用できます。
テンプレートで単純な条件付き判断を使用する方法を示す例を以下に示します。
<?php
$template = "<h1>いらっしゃいませ,{{name}}!</h1>{{if show_message}}<p>{{message}}</p>{{endif}}";
$variables = [
'name' => 'チャン・サン',
'message' => 'これが簡単なテンプレートエンジンの例です。',
'show_message' => true, // メッセージを表示するかどうかを制御します
];
// 使用 preg_replace_callback_array テンプレートエンジンを実装します
$patterns_and_callbacks = [
'/{{(.*?)}}/' => function ($matches) use ($variables) {
$key = $matches[1];
return isset($variables[$key]) ? $variables[$key] : '';
},
'/{{if (.*?)}}(.*?){{endif}}/s' => function ($matches) use ($variables) {
$condition = $matches[1];
$content = $matches[2];
// 条件と裁判官を分析します
if (isset($variables[$condition]) && $variables[$condition]) {
return $content;
}
return '';
},
];
$output = preg_replace_callback_array($patterns_and_callbacks, $template);
echo $output;
新しい正規表現/{{if(。*?)}}}(。*?){{endif}} /sは、条件付きステートメントに合わせて追加されます。
コールバック関数は、{{If条件}}の条件が真であるかどうかを確認します。 trueの場合、 {{message}}が表示されます。 falseの場合、何も表示されません。
preg_replace_callback_arrayを使用すると、テンプレートで可変交換と条件付き判断を処理する非常にシンプルなテンプレートエンジンを実装できます。このエンジンは非常に基本的ですが、テンプレートエンジンのコア機能を実装するために、正規表現とコールバック関数を使用する方法を示しています。これに基づいて、ループ、フィルター、マクロ定義など、より複雑な機能を拡張し、より強力なテンプレートエンジンを構築できます。