Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有什么好的设计模式可以用来从PHP的业务逻辑中提取HTML吗?_Php_Design Patterns_Refactoring - Fatal编程技术网

有什么好的设计模式可以用来从PHP的业务逻辑中提取HTML吗?

有什么好的设计模式可以用来从PHP的业务逻辑中提取HTML吗?,php,design-patterns,refactoring,Php,Design Patterns,Refactoring,我有一个旧的PHP4 web应用程序,其中大多数页面都是这样的(有些页面有左菜单,有些页面没有页脚): 上述解决方案的问题在于难以扩展和维护。你知道我可以使用什么设计模式或技术来进行更好的重构/重新设计吗? 感谢您的建议,并为我糟糕的英语表示歉意我想添加一个方法,可能称之为renderColumn($tdParams=array()),它只具有返回单个td元素(作为字符串)的简单任务: 初始化空字符串,$td\u单元格 在$td_cell一个开始的标记后,可以接受所述td标记的属性和值数组作为

我有一个旧的PHP4 web应用程序,其中大多数页面都是这样的(有些页面有左菜单,有些页面没有页脚):

上述解决方案的问题在于难以扩展和维护。你知道我可以使用什么设计模式或技术来进行更好的重构/重新设计吗?
感谢您的建议,并为我糟糕的英语表示歉意

我想添加一个方法,可能称之为
renderColumn($tdParams=array())
,它只具有返回单个td元素(作为字符串)的简单任务:

  • 初始化空字符串,
    $td\u单元格
  • $td_cell
    一个开始的
    标记后,可以接受所述
    td
    标记的属性和值数组作为paramater
    $tdParams
    ,该数组已设置为空数组的默认值
  • $td_单元格
    中附加一个结束标记
  • 返回$td\u单元格
为了渲染DB行,您可能(在稍后的时间点)有一个包含更多或更少数据点的查询-因此将需要更多或更少的
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();
?>