PHP最佳实践?

14

当使用PHP进行开发时,有什么好方法可以从显示页面中删除代码。我经常需要让外部人员编辑我工作的页面。这些人通常会被大量的PHP块所困扰,他们还喜欢破坏我的代码。

我尝试将代码块移出到函数中,因此现在整个HTML中都分散着各种函数。随着某些页面变得越来越复杂,代码又变得像程序一样,而处理POST请求也变得可疑。

我在PHP开发方面应该怎么做得更好?

9个回答

19

你不需要一个“系统”来进行模板化。 通过将演示和逻辑分开,您可以自己完成它。 这样设计师就可以搞砸显示效果,但不会影响其背后的逻辑。

以下是一个简单的例子:

<?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>

2
设计师仍然可能出错,除非你采取了一些措施。虽然我不特别喜欢Smarty,但它能够逐个函数或完全限制PHP使用的能力是一个很好的例子。但如果你将设计与代码分离,至少设计师的工作会更容易。 - Halil Özgür

6

看一下一些流行的PHP框架如何使用模板。例子包括cakePHP、Zend Framework和Code Igniter。即使您不打算基于这些框架构建您的网站,模板设计模式也是一种很好的方式,可以将php代码与您的网页设计师分离开来,让他们专注于布局而不是功能。


5
我觉得您需要在整个应用程序中开始实施所谓的“关注点分离”。人们在回答您关于页面编辑器破坏代码的问题时给出的模板示例是重要的,但代表了这种策略的仅仅是其中一个示例。随着您的程序变得越来越大和复杂,即使您的设计师没有破坏您的代码,修改和调试也会变得更加困难。
最常见的分离可能是数据、逻辑和展现之间的三向分离,正如设计模式Model-View-Controller(MVC)所描述的那样。您不需要完整的MVC框架来实现相同的基本原则。这个想法就是将处理数据(模型)的代码封装在一个地方,将向用户呈现这些数据的代码(视图)封装在另一个地方。您可以使用只关注于在正确的时间为正确的用户呈现正确数据的代码(控制器)将这些代码联系在一起。
从您的描述中,看起来您现在使用的是事务脚本模式,其中有一个名为“dothis.php”的php文件在浏览器中加载,所有函数定义和用于显示的HTML都在一起。你已经有了函数,所以你已经开始封装逻辑片段。
我会采取的方法是,与其他答案关于模板化的回答保持一致,将所有HTML移动到另一个文件中,只引用简单的PHP变量和一些循环(但尽可能少的条件切换)。这将使模板更易于阅读,更难破坏。当页面编辑器想要修改布局时,给他们那个文件。
然后,您将所有数据访问函数分离到另一个文件中,最好创建一个类(或多个类,具体取决于数据的复杂程度和重复使用的频率)。
此时,您的“dothis.php”已被剥离到可能只有一些配置代码(您可以将其分离到一个包含文件中),以及一些身份验证代码(您可以将其分离到自己的类中),并且仅调用数据访问函数,并调用已包含的模板文件。因此,控制器本身大大简化,更易于管理。

4
我强烈推荐阅读书籍PHP In Action。它带你了解数据库连接、模板系统以及Web应用程序的其他基础知识。如果每个PHP开发人员都阅读了这本书,那么这门语言的声誉将会更好。
此外,书中还有关于重构、单元测试和MVC控制模式的章节。

2

外部人员需要编辑逻辑还是只需要编辑显示(HTML)?

如果是后者,请查看Smarty模板引擎。


1

我认为我想远离笨重的框架。只需要一些方法,通常可以使页面更易读,代码更清晰。

Stack Overflow希望我决定哪个答案最好,但“最好”的标准是主观的。谁能说出什么是“最佳”实践呢?


1

如果你决定继续使用函数,可以从WordPress中汲取一些灵感。通过使模板更加细粒度化,你很可能可以将“程序”最小化。

此外,良好的工具(如HTML编辑器)可以帮助设计师忽略你的PHP代码,并在不破坏代码的情况下进行设计。(但我没有建议,抱歉。)

另一种方法是创建自己的模板系统,而不是使用SMARTY,但这可能需要太长时间来创建一个满足你需求的可用系统,超出了简单地将类似%%VARIABLE%%的文本替换成文本的范围。

我们公司使用SMARTY,即使在模板中有很多代码,设计师也知道如何处理它。对于简单的CMS网站,我们使用ExpressionEngine,它使用类似HTML的标记将逻辑插入到模板中。


0

我通常使用include,因为它们可以非常有用地组织和分组函数。此外,请注释您的代码。没有什么比让别人看到您的工作并不知道为什么要这样做更糟糕的了。合理命名变量和函数也可以走得很远-例如:

$userName = "John Doe";
$dateOfBirth = "04/02/1982";

function calculateUserAgeFromBirth($userName, $dateOfBirth)

像这样命名变量还有助于最小化关于代码实际执行内容的注释。


0

关于这个话题可以说很多,但一个非常基本的起点是尽可能将代码移动到单独的文件中,然后使用 include 语句。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接