微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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的任何建议.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Mip是什么意思以及作用有哪些
怎么测试Mip页面运行情况
MIP安装的具体步骤有哪些
HTML添加超链接、锚点的方法及作用详解(附视频)
MIP的规则有哪些
Mip轮播图组件中的重要属性讲解
Mip的内联框架组件是什么
怎么创建初始的MIP配置及模板文件
HTML实现多选框及无法提交多数据的原因分析(附视频)
HTML如何设置复选框、单选框以及默认选项?(图文+视频)