我正在用 PHP 编写一个数据提供程序类,以帮助我加快多行 SQL 查询结果的呈现速度。基本上,该类有一堆与 SQL 相关的属性和方法来帮助分页、排序和最终呈现数据。至于后者,我希望能够轻松地对行进行模板化,因此我编写了一个名为 render() 的方法,可以使用行模板文件作为参数从视图文件(在 MVC 模型中)调用该方法。它看起来类似于:
public function render($row_template_file) {
if($result = mysql_query($this->query)) {
while($row = mysql_fetch_array($result)) {
include $row_template_file;
}
}
}
实际的方法比这更复杂(它检查模板文件是否存在,使用数据抽象类而不是 mysql_* 函数等),但你明白了。行模板文件基本上是直接输出的 HTML,即:
<div class="row">
<div class="foo"><?php echo $row['foo']; ?></div>
<div class="bar"><?php echo $row['bar']; ?></div>
</div>
这种方法效果很好,唯一的问题是循环中的 include() 在性能方面不是一个好主意,尤其是在渲染大量行时。在保持以这种方式对行进行模板化的能力的同时,有什么可以替换它的吗?这里几乎没有类似的问题,但所有建议的解决方案都涉及将逻辑与演示混合,这是我想要避免的。我想在第一次迭代期间创建一个匿名函数,然后在所有后续迭代中调用它,但也许我想多了,或者在这里重新发明了轮子。有任何想法吗?