【发布时间】:2009-06-03 21:58:17
【问题描述】:
所以在工作中,我们有一个自制的模板系统,它重量轻,到目前为止对我们来说效果很好。
我们遇到的困难是我们希望能够遍历模板。用例类似于搜索结果。我们正在努力想办法做到这一点。我们现在想出了三种方法。首先是将 html 存储在循环中,然后循环遍历它并使用 concat 将变量放入 html 中。我们想到的第二种方法是重复包含一个文件。第三种方法是包含一次文件,使用输出缓冲来捕获其输出,将文本 echo " 添加到它,然后对其使用 eval。(我的老板希望我们想出创造性的方法来做这件事)。
好吧,我更喜欢 include 重复方法,因为它允许我们将 html 与逻辑完全分离。 eval 方法也可以做到这一点,但它似乎有点 hackish。好吧,我们对此进行了一些时间测试,发现将 html 放在循环中(方法一)是最快的,紧随其后的是 eval 方法,包括多次进入最后。包括实际上比 eval 方法慢了大约 5-6 倍。 (我们将文件包含/评估了 1000 次,并执行了 100 次并取平均值以获得我们的结果)。
有什么方法可以加快多重包含? (似乎每次我们执行包含 php 都会再次访问文件系统。)
或者有没有人有办法完成这种事情?
【问题讨论】:
-
这对于使用 sprintf 来说似乎很自然——使用 sprintf 的语法(%s、%d 等)格式化模板,执行 file_get_contents() 以获取格式化的 html 块,然后发送在变量中。
-
PHP 参考:php.net/sprintf
-
@artlung:呃,sprintf 太丑了!你为什么要这样做?
-
@musicfreak 我没有声称 sprintf 的美。这是一种将任意变量注入到格式化 HTML 块中的机制。此外,Boushley,您可能会查看 Smarty 模板系统 smarty.net> 处理变量的方式。例如:smarty.net/manual/en/language.basic.syntax.php。 Smarty 只解决了这个问题,并可能会为您提供有助于改进您自己开发的系统的语法的想法。
-
您可以添加一些伪代码来尝试了解它现在是如何工作的吗?
标签: php loops include templating