我怎样才能在php中创建自己的模板/编程引擎

时间:2010-05-05 11:28:02

标签: php regex programming-languages template-engine

我已经在自己的模板引擎上工作了一段时间,但我仍然被困在像

这样的文件中
<block : block1>
    <table>
        <block : row>
            <tr>
                <td>
                    {value}
                </td>
                <td>
                    {value2}
                </td>
            </tr>
        </block>
    </table>
</block>

我可以使用正则表达式获得“块1”但它会在第一个(“行”之一)中断

但我想要一种更聪明的方式(而不是使用像DOM这样的功能) 我在考虑像

这样的东西
while($i < strlen($code)){
    if(substr($code,$i,1)){
        //tag is opened
    }
}

2 个答案:

答案 0 :(得分:3)

基本上,你在这里构建一种编程语言(尽管很简单,它仍然是一种编程语言)。要解释编程语言,您需要一个编译器,它通常包含词法分析器(将输入流分成有意义的标记)和解析器(其中)逐个读取令牌并采取所需的任何操作)。在您的简化示例中,词法分析器可能是基于regexp的,并且解析器可以是一个简单的基于堆栈的解析器。

italic 中的术语实际上应该是维基百科链接)。

答案 1 :(得分:0)

我不完全确定你的问题是什么,但是在PHP中模仿语言已经有很多争论,但我认为 现在达成的普遍共识是滚动通常没有多大意义 你自己的模板语言。你可以通过例如获得即时的好结果。使用字符串替换 和正则表达式,但最终你需要更多的功能,如循环 或其他表达式,然后它将变得非常棘手(最终以创建自己的编译器结束)。

最好的建议通常是直接使用PHP作为模板语言 (这就是PHP首先设计的,并且严格遵循MVC模式也是一个很好的解决方案)或尝试一个 现有的模板引擎。只有你不能做任何一个 满足您的需求(大多数都可以通过插件机制扩展) 你应该开始制作自己的。