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

Mar*_*ssi 6 php logic presentation

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

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

  • 包含文件
  • 函数或类API
  • 模板系统

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

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

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

display_header();
display_navigation();
display_content();
display_footer();
Run Code Online (Sandbox Code Playgroud)

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

echo "<tr bgcolor=\"".$color."\"><td><a href=\"".$url."\">" ...
Run Code Online (Sandbox Code Playgroud)

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

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

然后,在HTML代码中,我将使用foreach循环遍历这些数组并显示内容.在某些情况下,会显示一些变量.如果存在设置的错误变量,我将在适当的位置显示该变量.

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

else echo 'Error';
Run Code Online (Sandbox Code Playgroud)

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

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

我还没弄明白的是我怎么能做到"先做逻辑,然后再进行演示"这样的事情,这样我就不必复制所有页面中的导航逻辑和导航演示.

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

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

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

Jos*_*h K 4

切勿使用 PHP 回显 HTML。相反,将其内联(没有邪恶的短标签)编写为

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

帮助分离逻辑/视图的其他选项是使用 PHP 框架,如CodeIgniter

我会放弃这本书,转而更多地专注于学习核心 PHP 技能,如函数、类等。然后开始使用几个流行的框架

附带说明:我不明白的是,在大多数示例代码中,如果某些数据库查询或其他错误给出错误,则总是存在:

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

我还没弄清楚的是,我怎样才能做到“先做逻辑,然后演示”的事情,这样我就不必在所有页面中复制例如导航逻辑和导航演示。

用MVC方法来思考事物。您首先调用控制器(逻辑)。它弄清楚需要什么。如果它需要来自数据库的数据,它会调用模型并请求它。然后它对其进行格式化,添加其他数据,运行其他查询,然后将其传递到视图。