Skip to content

Latest commit

 

History

History
147 lines (82 loc) · 12.1 KB

File metadata and controls

147 lines (82 loc) · 12.1 KB

零、序言

你参加过 PHP 会议吗?如果不是的话,我强烈推荐它,它是最接近活生生的 PHP 社区的。几周前,我从伦敦飞往密苏里州圣路易斯,在 php[tek](php[architect]主持的 php 会议)上发言。会议结束后,PHP 社区中有一个称为 WurstCon 的小传统。基本上,数百名 PHP 会议参与者挤进了一家小型热狗店,并主持了一场热狗大会,这常常让那里的工作人员大吃一惊。同样,PHP 活动的社区之夜是你遇到的最温暖、最受欢迎的社区活动;PHP 社区肯定是其他开发语言社区羡慕的地方。

从 PHP7 开始,PHP 项目发生了巨大的变化;但我所爱的,依然坚强。在任何 PHP 会议上,您都会感受到热情,文档的开放性,以及语言的采用。是的,在 PHP 本身中有一些做法无疑是不好的;然而,想想 PHP 社区最近取得的成就,从 PHPUnit 到 Composer。在本书中,请记住 PHP7 中的改进,我将与您分享其中的一些改进。项目的发展轨迹现在肯定是向上的,我们不要忘记,这并不总是正确的。PHP 社区已经从过去吸取了教训,同时该语言保持了编写糟糕内容的灵活性。

这本书将向您传授强大的软件工程技能,重点是在 PHP 中实现它们。在出版这本书的时候,这种材料有一定的空白和必要性。这本书试图成为一座灯塔,不仅展示软件设计理论,而且还试图传授具有实际价值的实用信息,以提高所编写代码的质量和可维护性。这本书在整个软件开发周期中不遗余力,将试图直面大多数软件项目失败的原因,同时也解决设计、重新设计和保护有效代码的问题。

这本书超越了四人帮所设想的传统设计模式,详细介绍了热情的 PHP 开发人员作为软件工程师或详细的 PHP 项目负责人取得成功所需的实践。本书将向您介绍理解项目管理技术所需的核心知识,为什么大多数软件开发项目会失败,以及为什么您可以使自己的项目成功。

最初,我考虑写一本关于 PHP 的书,当时我以前的同事 Mandi Rose 建议我写一本关于我用 PHP 学习的实践的书。不用说,在提出这个建议的时候,我的职业生涯中最好的阶段无疑就在我前面;当有机会写这样的东西时,我觉得随着时间的推移,我学到了很多东西。你决不能把这本书看作是 PHP 实践的全部;相反,您应该使用它来增加您的 PHP 知识库,但决不能局限于此。在这本书中,我的目标是给 PHP 社区一些东西,不管它有多小;读完这本书后,我会鼓励你坚持下去,并与他人分享你所学到的东西。

在本书的后面部分,我将倡导极限编程作为一种方法,勇气作为这种方法的关键价值。我想请大家记住极限编程价值观中关于勇气的解释:“我们会告诉你关于进度和评估的真相。我们不会记录失败的借口,因为我们计划成功。我们不会害怕任何事情,因为没有人会独自工作。我们会在任何时候适应变化。”当然,这是,我们都应该遵循一些关键建议,寻求真正理解风险,而不是畏缩在风险背后。对我们许多人来说,在职业生涯中编写的代码是我们劳动的最高表现。事实上,我们花在调试和开发上的深夜变成了清晨,这最终让我们展示了我们的劳动成果。从本质上说,作为软件工程师,我们编写的代码定义了我们是谁,因此我们应该开放地不断改进和重构我们的流程,这也是本书旨在支持您所做的。你选择允许我帮助你达到这个目标,我感到无比荣幸。

这本书涵盖的内容

[第 1 章](1.html "Chapter 1. Why "Good PHP Developer" Isnt an Oxymoron")为什么“优秀的 PHP 开发人员”Isn不是矛盾修饰法,介绍了设计模式的概念,作为常见问题的重复解决方案。

第 2 章反模式介绍了模式如何导致决定性的负面后果。

第三章创建设计模式探讨了四种设计模式的组合,即周边对象的创造。

第 4 章结构设计模式介绍了如何组合多个类和对象,以提供更清晰的界面。

第 5 章行为设计模式解释了如何通过识别有助于对象之间交流的模式来增加对象之间交流的灵活性。

第 6 章架构模式围绕解决与 web 应用程序/系统架构相关的常见问题展开,这些问题可能在代码库本身之外。

第 7 章重构展示了如何重新设计已经编写的代码以提高可维护性。

第 8 章如何编写更好的代码,涵盖了一系列其他地方没有讨论过的概念,最后还为开发人员提供了一些建议。

这本书你需要什么

PHP7 的安装将在本书中很好地为您服务。在本书中,您应该准备根据需要改变您的开发环境;我们将在遇到各种工具时介绍它们的安装。

这本书不是为那些绝望的敌对者或那些被动地反对接近新的软件工程原理的人而写的。这也不适合那些寻求成为孤独战士的人。当修改一个给定的代码库时,您必须设法改进整个代码库的代码以及所有在其上工作的人的代码。您必须愿意对自己编写的代码承担个人责任,而不是责怪外部因素。不能在共享代码基础上单方面提高代码的可维护性;您必须编写代码,以便为您之后维护代码的人维护代码质量。此外,在阅读本书时,无论是与团队中的人、用户组还是更大的 PHP 社区,都要保持能够分享所学知识的心态。换句话说,写这本书的时候要考虑到目的;阅读本书的目的是改进您的代码和您维护的代码库中的代码。

这本书是给谁的

这本书当然是针对 PHP 开发人员的,他们希望学习成为软件工程师所需的整套技能,特别是从软件设计中获得一些经验教训;本书将试图教育您如何使代码更易于扩展和开发。这本书试图让你的代码不仅仅是一包函数和类,而是更喜欢设计良好、编写良好、测试良好的代码。

你需要一个 PHP 的工作知识和足够的能力来构建一个应用程序,但决不需要你是一个 PHP 方面的专家;对软件工程基础的实用知识肯定会让你有所了解。

您必须以开放的心态和愿意挑战您对软件开发的先入之见来阅读本书。这本书将直面一些事实:作为一名开发人员,你个人可能会失败;这是至关重要的,你对待这本书的意愿,采取这些原则船上。

本书介绍了一组您可以采用的软件开发模式和原则。了解这些模式应该和不应该应用在哪里是至关重要的;这将在整本书中解释,特别是在最后一章。

阅读本书的一个关键原则是理解 PHP 的用途和用途。我希望您进入这本书,了解您希望 PHP 解决什么问题,以及您希望使用其他软件开发语言解决什么问题。

公约

在本书中,您将发现许多文本样式可以区分不同类型的信息。下面是这些风格的一些例子,并解释了它们的含义。

文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄如下所示:“index.php文件现在生成此结果”。

代码块设置如下:

<?php 

abstract class Notifier 
{ 
 protected $to; 

 public function __construct(string $to) 
 { 
 $this->to = $to; 
 } 

 abstract public function validateTo(): bool; 

 abstract public function sendNotification(): string; 

}

任何命令行输入或输出的编写方式如下:

echo $richard->hasPaws;

新术语重要词语以粗体显示。您在屏幕上看到的词语,例如,在菜单或对话框中,会出现如下文本:“将您的 web 浏览器指向您选择的 web 服务器,您应该会看到 Hello world!在屏幕上弹出。”

警告或重要注释显示在这样的框中。

提示

提示和技巧如下所示。

读者反馈

我们欢迎读者的反馈。让我们知道你对这本书的看法你喜欢还是不喜欢。读者反馈对我们来说很重要,因为它可以帮助我们开发出您将真正从中获得最大收益的标题。

要向我们发送一般反馈,只需发送电子邮件 feedback@packtpub.com,并在邮件主题中提及该书的标题。

如果您对某个主题有专业知识,并且您有兴趣撰写或贡献一本书,请参阅我们的作者指南www.packtpub.com/authors

客户支持

既然您是一本 Packt 图书的骄傲拥有者,我们有很多东西可以帮助您从购买中获得最大收益。

下载示例代码

您可以从您的帐户下载本书的示例代码文件 http://www.packtpub.com 。如果您在其他地方购买了本书,您可以访问http://www.packtpub.com/support 并注册,将文件直接通过电子邮件发送给您。

您可以通过以下步骤下载代码文件:

  1. 使用您的电子邮件地址和密码登录或注册我们的网站。
  2. 将鼠标指针悬停在顶部的“支持”选项卡上。
  3. 点击代码下载和勘误表。
  4. 在搜索框中输入图书的名称。
  5. 选择要下载代码文件的书籍。
  6. 从您购买本书的下拉菜单中选择。
  7. 点击代码下载。

您也可以通过点击 Packt Publishing 网站上书籍网页上的“代码文件”按钮下载代码文件。可以通过在搜索框中输入图书名称来访问此页面。请注意,您需要登录到您的 Packt 帐户。

下载文件后,请确保使用以下最新版本解压或解压缩文件夹:

  • WinRAR/7-Zip for Windows
  • 适用于 Mac 的 Zipeg/iZip/UnRarX
  • 适用于 Linux 的 7-Zip/PeaZip

该书的代码包也托管在 GitHub 上的https://github.com/PacktPublishing/Mastering-PHP-Design-Patterns/ 。我们在上还提供了丰富的书籍和视频目录中的其他代码包 https://github.com/PacktPublishing/ 。看看他们!

勘误表

虽然我们已尽一切努力确保内容的准确性,但错误确实会发生。如果您在我们的一本书中发现错误,可能是文本或代码中的错误,如果您能向我们报告,我们将不胜感激。通过这样做,您可以使其他读者免于沮丧,并帮助我们改进本书的后续版本。如果您发现任何错误,请访问进行报告 http://www.packtpub.com/submit-errata ,选择您的书籍,点击勘误表提交表链接,输入您勘误表的详细信息。一旦您的勘误表得到验证,您的提交将被接受,勘误表将上载到我们的网站或添加到该标题勘误表部分下的任何现有勘误表列表中。

要查看之前提交的勘误表,请转至https://www.packtpub.com/books/content/support 并在搜索字段中输入图书名称。所需信息将出现在勘误表部分下。

盗版

在互联网上盗版版权材料是所有媒体都面临的一个持续问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上发现任何形式的非法复制品,请立即向我们提供地址或网站名称,以便我们采取补救措施。

请联系我们 copyright@packtpub.com 与怀疑盗版材料的链接。

我们感谢您在保护我们的作者方面提供的帮助以及我们为您带来有价值内容的能力。

问题

如果您对本书的任何方面有疑问,请联系我们 questions@packtpub.com,我们会尽力解决这个问题。