加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 资源网站 > 资源 > 正文

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

发布时间:2020-12-14 22:43:01 所属栏目:资源 来源:网络整理
导读:概观 在2009年底,我为PHP / HTML编写了一个简单的模板系统,供我们的设计人员在小册子类网站上使用.该系统的目标是通过PHP处理的自定义标记允许模板化其他纯HTML.例如,模板化页面可能如下所示: 模板本身可能如下所示: 除了Page和Content / Container标签之

概观

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

模板本身可能如下所示:

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

自定义标签到PHP

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

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

好的,坏的和评估

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

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

问题

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

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

感谢阅读和TIA的任何建议.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读