有什么好的设计模式可以用来从PHP的业务逻辑中提取HTML吗?
我有一个旧的PHP4 web应用程序,其中大多数页面都是这样的(有些页面有左菜单,有些页面没有页脚): 上述解决方案的问题在于难以扩展和维护。你知道我可以使用什么设计模式或技术来进行更好的重构/重新设计吗?有什么好的设计模式可以用来从PHP的业务逻辑中提取HTML吗?,php,design-patterns,refactoring,Php,Design Patterns,Refactoring,我有一个旧的PHP4 web应用程序,其中大多数页面都是这样的(有些页面有左菜单,有些页面没有页脚): 上述解决方案的问题在于难以扩展和维护。你知道我可以使用什么设计模式或技术来进行更好的重构/重新设计吗? 感谢您的建议,并为我糟糕的英语表示歉意我想添加一个方法,可能称之为renderColumn($tdParams=array()),它只具有返回单个td元素(作为字符串)的简单任务: 初始化空字符串,$td\u单元格 在$td_cell一个开始的标记后,可以接受所述td标记的属性和值数组作为
感谢您的建议,并为我糟糕的英语表示歉意我想添加一个方法,可能称之为
renderColumn($tdParams=array())
,它只具有返回单个td元素(作为字符串)的简单任务:
- 初始化空字符串,
$td\u单元格
- 在
一个开始的$td_cell
标记后,可以接受所述
标记的属性和值数组作为paramatertd
,该数组已设置为空数组的默认值李>$tdParams
- 在
中附加一个结束标记李>$td_单元格
返回$td\u单元格
td
单元格
对于您的
renderHeader
方法,我将添加至少两个参数:title
,并且可能是您指定的
,因为我可以看到这些参数经常更改 谢谢你的回复,但正如我在问题中提到的,我不喜欢我提出的解决方案,我正在寻找一些东西better@WileTheCoyot好的,我现在明白了。好。我想我现在明白你想做什么了。也许另一种方法是看看PHP中是否有您喜欢的MVC框架。有许多选择,可能会符合您的要求。在自定义数据模型并从控制器发出命令后,您只需管理视图和布局。也许写一些已经满足你需要的东西会更有趣?是的,我想最后我应该使用MVC框架。让我们希望有人知道一些好的模式可以使用(重新实现所有的事情都将是一项艰巨的工作)@WileTheCoyot因为你知道你的数据结构,配置和编码以适应(理论上)的努力应该少于试图重新发明你目前不满意的东西。到目前为止,我只使用了几个PHP框架,所以我不能给出一个明智的建议。我能说的是,Laravel似乎非常受欢迎,我使用了Zend 1.12,尽管Zend现在已经进入V2。祝你好运
<?php
echo "<html>";
echo "<head><title>TITLE GOES HERE</title></head";
echo "<body>";
echo "<h2>THIS IS A TITLE</h2>";
// Here i fetch data from DB
echo "<table>";
echo "<tr>";
echo "</tr>";
foreach($rowsFromDB as $row) {
echo "<tr>";
// here i echo some <td> containing $row data
echo "</tr>";
}
echo "</table>";
echo "</body>";
echo "</html>";
?>
<?php
class PageRenderer {
public static function renderHeader() {
echo "<html>";
echo "<head><title>TITLE GOES HERE</title></head";
echo "<body>";
echo "<h2>THIS IS A TITLE</h2>";
}
public static function renderContent($rowsFromDB) {
echo "<table>";
echo "<tr>";
echo "</tr>";
foreach($rowsFromDB as $row) {
echo "<tr>";
// here i echo some <td> containing $row data
echo "</tr>";
}
echo "</table>";
}
public static function renderFooter() {
echo "</body>";
echo "</html>";
}
}
$renderer=new PageRenderer();
$renderer->renderHeader();
// Fetch data from DB
$renderer->renderResults($rowsFromDB);
$renderer->renderFooter();
?>