Как раскрыть переменные в строке
Я хотел бы расширить переменные в строке таким же образом, как переменная в строке в двойных кавычках раскрывается.
$string = '<p>It took $replace s</>';
$replace = 40;
expression_i_look_for;
$string
должен стать'<p>It took 40 s</>';
Я вижу очевидное решение, подобное этому:
$string = str_replace('"', '\"', $string);
eval('$string = "$string";');
Но мне действительно это не нравится, потому что eval () небезопасен. Есть ли другой способ сделать это?
контекстЯ создаю простой шаблонизатор, вот где мне это нужно.
Пример шаблона (view_file.php)
<h1>$title</h1>
<p>$content</p>
Шаблон рендеринга (упрощенный код):
$params = array('title' => ...);
function render($view_file, $params)
extract($params)
ob_start();
include($view_file);
$text = ob_get_contents();
ob_end_clean();
expression_i_look_for; // this will expand the variables in the template
return $text;
}
Расширение переменных в шаблоне упрощает его синтаксис. Без него приведенный выше пример шаблона будет:
<h1><?php echo $title;?></h1>
<p><?php echo $content;?></p>
Как вы думаете, этот подход хорош? Или я должен смотреть в другом направлении?
редактироватьНаконец, я понимаю, что не существует простого решения из-за гибкого способа, которым PHP расширяет переменные (даже${$var}->member[0]
будет действительным.
Так что есть только два варианта:
Принять существующую полноценную систему шаблоновПридерживайтесь чего-то очень простого, что по сути ограничено включением просмотра файлов черезinclude
.