【发布时间】:2008-12-05 03:50:08
【问题描述】:
我一直在尝试重构我之前开发的“一点”代码。基本上,该项目是我对不知道如何有效使用 XSLT 的回应,所以我用 PHP 开发了一个 XML 转换系统。该程序读取 XML 文件的标签,并按照以下方式将其转换为 HTML:
private function getTemplate(...) {
switch ($nodeName) {
case "a" :
// code here to generate a link tag
break;
case "box" :
// code here to generate the divs and whatnot to create a box
break;
case "ref" :
// look up an external reference file and include a bibliography
break;
default :
// do the default thing
}
}
这一切都很好,除了最后我的 switch 有 26 个分支,而且曾经的 switch 块有超过 1000 行代码。不用说,它使维护变得更加困难。
我现在所做的是将每个分支的代码提取到它自己的文件中(名为“a.php”、“box.php”、“ref.php”...)和include每次归档:
if (file_exists("templates/$nodeName.php")) {
include "templates/$nodeName.php";
} else {
// do the default thing
}
同样,这很有效,但基准测试表明它已将处理时间减慢了 50%。我假设这是因为现在有多达 4000 个includes 正在完成。
我正在考虑将每个模板的代码放入一个函数中,如果尚未声明该函数,则包含该文件,然后运行该函数 - 唯一的问题是现有代码已经写在原函数的范围内,使用$this等
鉴于此代码不是实时运行的(例如:它只是将 XML 处理为存储的静态 HTML 文件 - 它不是即时完成的),您对我有什么建议吗?
【问题讨论】:
标签: php xml refactoring include