PHP:将变量插入模板文件 - include()或file_get_contents()?

时间:2015-07-06 09:58:57

标签: php variables templates

我正在开展一个项目,我将所有HTML内容与其余的PHP代码分开。需要为PHP变量解析任何HTML的每个实例都通过函数调用发送。大多数都处理来自数据库的动态数据。

模板文件的一个简单示例:

<div id='{$data['id']}'>{$data['text']}</div>

$ data数组中的变量通过函数调用传递,其中HTML代码段需要添加到输出缓冲区:

$output .= $html->load_template('template_id', array('id' => 123, 'text' => 'Testing'));

html :: load_template()函数只是找到正确的文本文件,并且应该加载变量并将字符串作为HTML返回。这是我遇到问题的地方:

    public static function load($template, $data=array()) {
       ob_start();
       include ( TEMPLATE . $template .'.tpl' );
       ob_flush();
    }

我尝试过使用include()和file_get_contents(),但无济于事 - 我正在寻找一个简单的解决方案,我可以使用{$ data ['var']}语法,最好保留模板HTML作为一个简单的变量,因此可以将其添加到输出中。

我试图避免使用eval()。

有人可以给我一些指导吗?

1 个答案:

答案 0 :(得分:0)

我过去做过同样的事情,你可以像这样修改下面的代码:

public static function load($template, $data=array()) {
    ob_start();
    include ( TEMPLATE . $template .'.tpl' );
    $getData = ob_get_clean();
    preg_match_all("|{([^>].*)}|U", $getData, $getDataArr, PREG_SET_ORDER);
    if (is_array($getDataArr) && count($getDataArr) > 0) {
        foreach ($getDataArr as $php) {
            if (strpos($php[1],'$') !== false) {
                $getData= str_replace($php[0], (eval('return $'.str_replace('$', '', $php[1]).';')), $getData);
            }
        }
    }

    echo $getData;
}