あなたが探しているように見えるのは、単純なテンプレート言語です。
PHP を書いてからずいぶん経ちますが (その理由を突然思い出しました...)、ここに私が作り上げたものがあります。
$a->name
オブジェクト ( ) と配列 ( )の両方$a["name"]
を入力オブジェクトとしてサポートする必要があります。
に新しいフィルター (名前 -> 関数名のマッピング) を追加できます$valid_filters
。
$valid_filters = array("title" => "ucfirst", "upper" => "strtoupper");
function _apply_template_helper($match) {
global $_apply_template_data, $valid_filters;
$var = $match[1];
$filter = $valid_filters[trim($match[2], ':')];
$value = is_array($_apply_template_data) ? $_apply_template_data[$var] : $_apply_template_data->$var;
if($filter && !empty($value)) $value = call_user_func($filter, $value);
return !empty($value) ? $value : $match[0];
}
function apply_template($template, $data) {
global $_apply_template_data;
$_apply_template_data = $data;
$result = preg_replace_callback('/\{\{(.+?)(:.+?)?\}\}/', "_apply_template_helper", $template);
$_apply_template_data = null;
return $result;
}
それの使い方:
$template = "Hello {{name:title}}, you have been selected to win {{amount}}, {{salutation:upper}}";
echo apply_template($template, array("name"=>"john", "amount" => '$500,000', "salutation" => "congratulations"));
結果:
こんにちはジョン、あなたは $500,000 の当選者に選ばれました。おめでとうございます