Php 基本模板引擎修复程序
我正在尝试为php制作一个(非常)基本的模板引擎。根据我的研究,我发现我使用的一种方法非常不受欢迎。我想知道是否有人知道一个伟大的选择,以获得相同的结果,所以我不使用它。如果有人看到任何其他可以改进的地方,请分享 不建议使用的方法是Php 基本模板引擎修复程序,php,Php,我正在尝试为php制作一个(非常)基本的模板引擎。根据我的研究,我发现我使用的一种方法非常不受欢迎。我想知道是否有人知道一个伟大的选择,以获得相同的结果,所以我不使用它。如果有人看到任何其他可以改进的地方,请分享 不建议使用的方法是eval()方法 这是php文件 <?php class Engine { private $vars = array(); public function assign($key, $value) { $this->vars[$key
eval()
方法
这是php文件
<?php
class Engine {
private $vars = array();
public function assign($key, $value) {
$this->vars[$key] = $value;
}
public function render($file_name) {
$path = $file_name . '.html';
if (file_exists($path)) {
$content = file_get_contents($path);
foreach ($this->vars as $key => $value) {
$content = preg_replace('/\{' . $key . '\}/', $value, $content);
}
eval(' ?>' . $content . '<?php ');
} else {
exit('<h4>Engine Error</h4>');
}
}
}
?>
这是index.php文件
<?php
include_once 'engine.php';
$engine = new Engine;
$engine->assign('username', 'Zach');
$engine->assign('age', 21);
$engine->render('test');
?>
这里是一个测试html文件,用于显示其基本功能
我的名字是{username},我是{age}岁代码>
产出:
我叫扎克,今年21岁代码>
非常感谢 如果您只想向页面输出一些文本,只需使用echo
:
echo $content;
这比eval(“?>”.$content.”好。有人知道我可以用什么来代替eval()
method with?????其他模板系统使用include
-例如,Twig使用解析并编译为PHP类的模板文件来实现这一点。只需确保您的模板不会被恶意代码破坏。@Lukas您的说法是replaceeval()
和包含我不明白。我是说包含PHP代码是夯实引擎的常见做法。实际上包含xy.PHP;
和eval(file_get_contents('xy.PHP');
-只是后者需要两个步骤。我使用eval()阅读
允许使用php代码,而简单地使用echo
则不行。我想替换eval()
但仍然能够使用php@zachstarnes:你的意思是你想让权限echo
只允许文本或html,而eval
允许使用php。@zachstarnes:我知道,但我是说,具体来说,你想在哪里允许我为误解你道歉。我不确定,但如果我想把它包括进去,我该怎么做呢?
$engine = new Engine;
$engine->assign('username', '{age}');
$engine->assign('age', 21);
$engine->render('test');