你能把PHP文件渲染成一个变量吗?

php
2022-08-31 00:18:04

如果我有一个你好.php文件,如下所示:

Hello, <?php echo $foo; ?>!

我想在一些php代码中做这样的事情:

$text = renderPhpToString('hello.php', array('foo'=>'World'));

并最终得到

$text == 'Hello, World!'

使用标准 PHP 5 可以做到这一点吗?显然,我想要更复杂的模板,包括循环等等。


答案 1

您可以使用如下函数:

function renderPhpToString($file, $vars=null)
{
    if (is_array($vars) && !empty($vars)) {
        extract($vars);
    }
    ob_start();
    include $file;
    return ob_get_clean();
}

它使用输出缓冲区控制函数 ob_start() 来缓冲以下输出,直到返回该输出。ob_get_clean()

编辑请确保验证传递给此函数的数据,以便该函数没有会覆盖传递的参数值的元素。$varsfile$file


答案 2

正如Gumbo所说,你必须检查$file变量,这是一个微妙的错误,已经咬了我一口。我会使用func_get_arg(i)并且根本没有变量,还有一件小事,我会使用 require。

function renderPhpToString( )
{
    if( is_array( func_get_arg(1) ) ) {
        extract( func_get_arg(1) );
    }
    ob_start();
    require func_get_arg( 0 );
    return ob_get_clean();

}

推荐