Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基本模板引擎修复程序_Php - Fatal编程技术网

Php 基本模板引擎修复程序

Php 基本模板引擎修复程序,php,Php,我正在尝试为php制作一个(非常)基本的模板引擎。根据我的研究,我发现我使用的一种方法非常不受欢迎。我想知道是否有人知道一个伟大的选择,以获得相同的结果,所以我不使用它。如果有人看到任何其他可以改进的地方,请分享 不建议使用的方法是eval()方法 这是php文件 <?php class Engine { private $vars = array(); public function assign($key, $value) { $this->vars[$key

我正在尝试为php制作一个(非常)基本的模板引擎。根据我的研究,我发现我使用的一种方法非常不受欢迎。我想知道是否有人知道一个伟大的选择,以获得相同的结果,所以我不使用它。如果有人看到任何其他可以改进的地方,请分享

不建议使用的方法是
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您的说法是replace
eval()
包含
我不明白。我是说包含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');