4

目前正在开发一个“简单”模板类,问题是如何在不使用 eval 的情况下在字符串中执行 PHP 代码?

以下示例是我的模板类的工作方式:

$user = 'Dave';

ob_start();     
include 'index.tpl';
$content = ob_get_clean(); // String

$pattern = sprintf('/%s\s*(.+?)\s*%s/s', '{{', '}}'); // replace with php tags
$new_content = preg_replace($pattern, '<?php echo $1; ?>', $content);

echo $new_content; 

索引.tpl

<html>
     <head></head>
     <body>
         Hello {{ $user }}!
     </body>
</html>

我得到以下结果:

Hello !

我不想使用 eval 因为它使用起来有多慢和糟糕,有没有其他方法可以做到这一点?laravel 刀片引擎不使用 eval 所以必须有。

谢谢,

乔尔。

4

2 回答 2

0

您不需要执行 PHP 代码。您用{{ $user }}不再执行的 PHP 代码替换您的代码。所以你的 HTML 将在替换后如下所示:

<?php echo "Dave" ?>

您的浏览器认为<?...>是 HTML 标记,因此不会显示正确的名称。

解决方案:只需替换{{ $user }}Dave,为什么要添加更多 PHP 代码?

于 2013-08-11T01:26:56.257 回答
-1

我建议您在为变量赋值时,应该像这样将其作为全局变量;

$GLOBALS['My_Vars']['VarName'] = $Value;

当您从示例 $user 中的代码中检索变量的名称时,您将更{{ $user }}改为其中的值$GLOBALS['My_Vars']['user']

在这种情况下,您不需要使用 vel

于 2014-07-22T04:56:53.250 回答