PHP最佳做法?
用PHP开发时,从显示页面中删除代码的好方法是什么。通常,我工作的页面需要由外部人员进行编辑。这个人经常被很多PHP块弄糊涂,也喜欢破坏我的代码。
我尝试过将代码块移到函数中,所以现在有一些函数散布在整个HTML中。随着某些页面变得越来越复杂,它又重新成为程序,并且处理POST也成为问题。
在PHP开发中,我可以做得更好吗?
解决方案
回答
关于这个话题有很多可以说的,但是最基本的出发点是将尽可能多的代码移到单独的文件中,然后使用include语句。
回答
看一下一些流行的PHP框架如何使用模板。示例包括cakePHP,Zend Framework和Code Igniter。即使我们不打算将站点建立在这些框架上,模板设计模式也是使php代码远离Web设计人员的一种好方法,因此,他们可以专注于布局而不是功能。
回答
我通常使用include,因为它们对于将功能组织和分组在一起非常有用。另外,注释代码。没有什么比让其他人看到工作并且不知道我们为什么这样做更糟糕的了。合理地命名变量和函数也可以走很长一段路,例如:
$userName = "John Doe"; $dateOfBirth = "04/02/1982"; function calculateUserAgeFromBirth($userName, $dateOfBirth)
像这样命名变量也有助于使对代码实际作用的注释最小化。
回答
外部人员是否需要编辑逻辑或者仅编辑显示(HTML)?
如果是后一种情况,请签出Smarty模板引擎。
回答
我们不需要"系统"来做模板。
我们可以通过将演示文稿和逻辑分开来自己完成操作。
通过这种方式,设计人员可以弄乱显示器,但不能搞乱背后的逻辑。
这是一个简单的例子:
<?php $people = array('derek','joel','jeff'); $people[0] = 'martin'; // all your logic goes here include 'templates/people.php'; ?>
现在是people.php文件(我们给设计者的文件):
<html> <body> <?php foreach($people as $name):?> <b>Person:</b> <?=$name?> <br /> <?php endforeach;?> </body> </html>
回答
我想我想远离一个笨拙的框架。我可以使用的一些方法通常可以使页面更清晰,代码更清晰。
Stack Overflow希望我决定最佳答案,何时最佳是主观意见。谁说什么是"最佳"实践。
回答
如果我们决定继续使用功能,则可以从WordPress中获得一些启发。我们可以通过使模板更精细来将"程序"减少到最小。
同样,好的工具(例如HTML编辑器)可以帮助设计人员忽略PHP,并在不破坏代码的情况下进行设计。 (但是我没有建议,对不起。)
另一种方法是创建自己的模板系统而不是SMARTY,但是创建满足我们需要的工作系统可能会花费很长时间,而这仅仅是用文本替换%% VARIABLE %%之类的东西。
我们公司使用SMARTY,即使模板中包含大量代码,设计人员也知道如何使用它。对于简单的CMS网站,我们使用ExpressionEngine,该引擎使用类似HTML的标签将逻辑插入模板中。
回答
在我看来,我们通常需要在整个应用程序中开始实施所谓的"关注点分离"。人们针对我们对页面编辑器破坏代码的特定抱怨而给出的示例模板很重要,但仅代表此策略的一个示例。随着程序越来越大,越来越复杂,即使设计人员没有破坏代码,也很难对其进行修改和调试。
如设计模式模型-视图-控制器(MVC)中所述,最常见的分离可能是数据,逻辑和表示形式之间的三种方式分离。我们不需要适当的MVC框架即可实现相同的基本原理。这个想法只是将封装处理数据(模型)的代码封装在一个地方,将呈现数据给用户(视图)的代码封装在一个地方。我们将该代码与仅与在正确的时间(控制器)向正确的用户提供正确的数据有关的代码绑定在一起。
从描述看来,我们现在好像是一个事务脚本模式,在该模式中,我们有一个php文件" dothis.php"已加载到浏览器中,并且所有函数定义和用于显示的HTML都在一起。我们已经具有函数,因此我们已经开始封装逻辑部分。
与本文有关模板的其他答案一致,我将采用的方法是仅将简单的PHP变量和可能的某些循环(仅需尽可能少的条件切换)引用的所有HTML都删除到另一个文件中。这将使模板更易于阅读且更难破解。当页面编辑器想要修改布局时,请给他们那个文件。
然后,我们将所有数据访问功能分离到另一个文件,理想情况下创建一个类(或者几个类,具体取决于数据的复杂程度和需要重用的频率)。
此时," dothis.php"已被简化为一些配置代码(可以将其分离为一个include和一些身份验证代码(可以将其分离为自己的类),并且仅调用数据访问功能,并调用包含的模板文件,因此控制器本身得到了极大的简化,并且易于管理。
回答
我强烈建议我们阅读《 PHP In Action》一书。它带我们抽象化数据库连接,模板化系统以及Web应用程序的所有其他基础知识。如果每个PHP开发人员都阅读这本书,那么该语言将享有更好的声誉。
它还包含有关重构,单元测试和MVC控制模式的章节。