php - 在没有 Eval 的情况下在字符串中执行 PHP 代码

标签 php string templates eval

目前正在开发一个“简单”的模板类,问题是如何在不使用 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 Blade 引擎不使用 eval 所以必须有。

谢谢,

乔尔。

最佳答案

您不需要执行 PHP 代码。你更换你的 {{ $user }}使用不再执行的 PHP 代码。所以你的 HTML 将在替换后看起来像这样:

<?php echo "Dave" ?>

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

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

关于php - 在没有 Eval 的情况下在字符串中执行 PHP 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18167563/

相关文章:

php - 使用模型时如何在 PHP Active Record 中创建事务?

const char 指针赋值

c++ - 为什么 c++ string == (equality) 运算符比手动逐个检查字符快得多?

c++ - 派生类和模板参数

c++ - 具有不同签名的多态性和重载函数

c++ - 具有隐藏可见性的 C++ 模板参数问题

php - 返回和换行符会破坏正则表达式结果

php - MySQL 插入在一次提交中发生两次

php - 使用 PHP 从 MySQL 获取文本字段作为字符串时出现问题

javascript - 从字符串中的第一句话中获取最多 8 个单词