【发布时间】:2013-08-12 14:49:39
【问题描述】:
目前正在开发一个“简单”的模板类,问题是如何在不使用 eval 的情况下在字符串中执行 PHP 代码?
以下示例是我的模板类的工作方式:
$user = 'Dave';
ob_start();
include 'index.tpl';
$content = ob_get_clean(); // String
$pattern = sprintf('/%s\s*(.+?)\s*%s/s', '{{', '}}'); // replace with php tags
$new_content = preg_replace($pattern, '<?php echo $1; ?>', $content);
echo $new_content;
index.tpl
<html>
<head></head>
<body>
Hello {{ $user }}!
</body>
</html>
我得到以下结果:
Hello !
我不想使用 eval,因为它使用起来又慢又糟糕,有没有其他方法可以做到这一点? laravel 刀片引擎不使用 eval 所以必须有。
谢谢,
乔尔。
【问题讨论】:
-
曾经研究过模板引擎,例如 smarty?
-
如果你只想从变量中放入东西,那么 str_replace 就可以了。
-
您可以使用 Handlebars 或 Mustache 工程师模板。