PHP – 使用自定义标签进行模板化 – 这是eval的合法使用吗?

前端之家收集整理的这篇文章主要介绍了PHP – 使用自定义标签进行模板化 – 这是eval的合法使用吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

概观

在2009年底,我为PHP / HTML编写了一个简单的模板系统,供我们的设计人员在小册子类网站上使用.该系统的目标是通过PHP处理的自定义标记允许模板化其他纯HTML.例如,模板化页面可能如下所示:

模板本身可能如下所示:

除了Page和Content / Container标签之外,核心中还包含一些其他标签,用于流控制,迭代集合,输出动态值等.框架的设计使得添加自己的一套很容易.标记在另一个前缀和命名空间下注册

自定义标签PHP

我们如何解析这些自定义标签?由于无法保证HTML文件是格式良好的XML,因此XSLT / XPATH等解决方案将不可靠.相反,我们使用正则表达式来查找带有已注册前缀的标记,并用PHP代码替换它们. PHP代码是基于堆栈的设计……在遇到开始标记时,表示标记的对象被创建到堆栈上,并且其“初始化函数”(如果有的话)运行.每当遇到已注册的结束标记时,最新的对象将从堆栈中弹出,并且其“呈现函数”将运行.

因此,在框架用PHP替换模板标签之后,我们的示例页面可能看起来像这样(实际上它有点丑陋):

PHP $tags->push('tt','Page',array('template'=>'templates/main.html')); ?>
  PHP $tags->push('tt','Content',array('name'=>'leftColumn')); ?>
    PHP $tags->pop(); ?>
  PHP $tags->push('tt',array('name'=>'rightColumn')); ?>
    PHP $tags->pop(); ?>
PHP $tags->pop(); ?>

好的,坏的和评估

现在,如何执行我们新生成PHP代码?我可以在这里想到几个选项.最简单的方法是简单地评估字符串,这样就足够了.但是,任何程序员都会告诉你“eval是邪恶的,不要使用它……”所以问题是,我们可以在这里使用比eval更合适的东西吗?

我已经考虑使用临时或缓存文件,使用PHP://输出流等,但据我所知,这些并不比eval提供任何真正的优势.缓存可以加快速度,但实际上我们对这个东西的所有站点已经非常快,所以我认为此时不需要进行速度优化.

问题

对于此列表中的每个事项:这是一个好主意吗?你能想到一个更好的选择吗?

>一般的整个想法(html / PHP自定义标签)
>将标签转换为PHP代码而不是直接处理
>基于堆栈的方法
>使用eval(或类似)

感谢阅读和TIA的任何建议. 原文链接:https://www.f2er.com/html/425714.html

猜你在找的HTML相关文章