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

时间:2009-04-17 19:50:25

标签: php

如果我有这样的hello.php文件:

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

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

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

并以

结束
$text == 'Hello, World!'

标准PHP 5可以实现吗?显然我想要更多带有循环的复杂模板等等。

5 个答案:

答案 0 :(得分:37)

您可以使用以下功能:

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()返回。

修改确保验证传递给此函数的数据,以便$vars没有file元素覆盖传递的$file论证价值。

答案 1 :(得分:3)

正如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();

}

答案 2 :(得分:2)

http://www.devshed.com/c/a/PHP/Output-Buffering-With-PHP/

输出缓冲可能是开始的地方。

答案 3 :(得分:2)

关于传递$vars = array('file' => '/etc/passwd');,您可以使用extract($vars, EXTR_SKIP);

答案 4 :(得分:1)

您可以使用output buffering执行此操作,但可能更适合使用众多模板引擎之一。