繁体   English   中英

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

[英]Separation of presentation and business logic in PHP

我正在编写我的第一个真正的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编程的概念或方法,但我还不知道它们的用语。

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

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

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

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

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

作为旁注:我不明白的是,在大多数示例代码中,如果某些数据库查询或诸如此类错误,则始终存在:

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

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

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

听起来像模板引擎是你正在寻找的 - 请谷歌搜索很多结果。 就个人而言,我非常喜欢聪明

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM