Как раскрыть переменные в строке

проблема

Я хотел бы расширить переменные в строке таким же образом, как переменная в строке в двойных кавычках раскрывается.

$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.

Ответы на вопрос(7)

Ваш ответ на вопрос