在PHP中分离表示和业务逻辑

时间:2010-06-15 14:21:23

标签: php logic presentation

我正在编写我的第一个真正的PHP网站,并且想知道如何使我的代码对我自己更具可读性。我正在使用的参考书是PHP和MySQL Web Development 4th ed。

上述书籍提供了三种分离逻辑和内容的方法:

  • 包含文件
  • 功能或类API
  • 模板系统

我还没有选择任何这些,因为围绕这些概念缠绕我的大脑需要一些时间。但是,我的代码已成为前两个代码的混合体,因为我只是在这里复制粘贴并随时修改。

在演示方面,我的所有页面都有这些常见元素:标题,顶部导航,侧边栏导航,内容,右侧边栏和页脚。

本书中基于函数的示例表明我可以使用这些显示函数来处理所有演示示例。所以,我的页面代码将是这样的:

display_header();
display_navigation();
display_content();
display_footer();

但是,我不喜欢这样,因为本书中的示例将这些打印语句与HTML和PHP混合在一起:

echo "<tr bgcolor=\"".$color."\"><td><a href=\"".$url."\">" ...

我宁愿在中间使用带有PHP的HTML,而不是相反。

我正在考虑制作我的页面,以便在我的页面开头,我将从数据库中获取所有数据并将其放入数组中。我还将获取变量的数据。如果这些进程中有任何错误,我会将它们放入错误字符串中。

然后,在HTML代码中,我将使用foreach循环遍历这些数组并显示内容。在某些情况下,会显示一些变量。如果有一个设置的错误变量,我会在正确的位置显示它。

(作为旁注:我不明白的是,在大多数示例代码中,如果某些数据库查询或whatnot给出错误,总会有:

else echo 'Error';

这令我感到困惑,因为当示例代码出错时,有时甚至在HTML开始之前就会回显......)

对于使用过ASP.NET的人来说,我已经习惯了代码隐藏文件和lblError,我正在尝试做类似的事情。

我还没想到的是我怎么能这样做“先做逻辑,然后再进行演示”,以便我不必复制所有页面中的导航逻辑和导航演示。

我应该做一些包含文件还是我可以在这里使用函数,但有点不同?有没有什么好文章可以更彻底地解释这些分离表达和逻辑的“风格”。这本书我只有一个关于这个东西的段落。

我在想的是我在谈论一些关于PHP编程的概念或方法,但我还不知道它们的用语。

我知道这不是一个直截了当的问题,我只是需要一些帮助来组织我的想法。

3 个答案:

答案 0 :(得分:4)

从不用PHP回显HTML。而是将其内联(没有邪恶的短标记)写为

<tr class="<?php echo $myclass; ?>">

帮助分离逻辑/视图的其他选项是使用像CodeIgniter这样的PHP框架。

我会放弃这本书,而是更多地关注学习核心PHP技能,如函数,类等。然后开始在那里播放several popular frameworks

  

作为旁注:我没有   在大多数例子中都明白了   代码,如果有些数据库查询或   什么给出了错误,有   总是:

那是因为他们错误地显示错误。您应该将错误存储在一个sesssion中,然后在页面上显示它们(清除它们)或使用error_log函数将它们放入错误日志中。 error_log("Something happened in MyClass");

  

我还没想到的是如何做到的   我能做到这一点“先做逻辑,然后做   介绍“我想做的事情   不必复制,例如   导航逻辑和导航   在所有页面中进行演示。

MVC方法思考问题。您首先调用控制器(逻辑)。它找出了所需要的东西。如果它需要来自数据库的数据,它会调用一个Model并请求它。然后它格式化它,添加其他数据,运行其他查询,然后将其传递给视图。

答案 1 :(得分:1)

听起来像模板引擎就是你要找的东西 - 请谷歌搜索很多结果。就个人而言,我非常喜欢smarty

(扔掉那本书,听起来像是......老了)

答案 2 :(得分:1)

MVC(模型视图控制器)听起来可能适合您的需求。您可以阅读here