我正在尝试创建一个支持继承和扩展的模板系统,因此最终页面是由不同开发人员/设计人员编写的不同模板层的结果。除了将模板存储在可以通过字符串替换函数搜索和操作的变量中,我想不出任何其他方式。我真的不喜欢这种方式,但还有其他方法可以达到这个目的吗?
如果我必须这样做,那就是将模板存储在变量中然后回显它们,性能方面的区别是什么(速度和内存使用)而不是包含一个包含模板的文件?
// file1.php
<?php
$string = 'abcdef';
echo $string;
// file2.php
abcdef
// file3.php
<?php
include 'file1.php';
/* Or */
include 'file2.php';
考虑$ string中的一个非常大的字符串,例如超过1MB甚至更大,哪种方法在性能和内存使用方面更好?
答案 0 :(得分:1)
我已经尝试过这样做,发现Output Control Functions对于创建继承模板引擎非常有用。
实际的实现可能会变得非常复杂,所以我不会详细介绍任何实现细节。
基本上,您使用输出缓冲区捕获输出。您可以通过构建输出缓冲区层来创建继承层次结构,然后以各种方式保留/放弃/组合输出。
浏览documentation。如果您还有其他问题,请回过头来询问另一个具体问题。
关于性能,缓冲输出意味着您可以在一次命中而不是每个echo语句中返回整个渲染输出。我相信这确实提高了性能。
另外,请考虑现有模板引擎实现之间的区别。对{{include template}}
vs <?php include('template') ?>
之类的东西使用字符串替换和eval的引擎,其中include()
缓冲template.php的输出,然后将其插入到页面中(这也可能是类似的电话)。我认为后者会更有效率(虽然我没有证据或统计数据支持)。