零、序言

PHP7 在开源社区掀起了一场风暴,打破了速度方面的记录,这在隐喻意义上是,让人大吃一惊。从最基本的意义上讲,核心工程团队已经对语言进行了重大重写,但仍然能够在很大程度上保持向后兼容性。从表面上看,这些内部更改的影响表现为速度提高了近 200%,显著节省了内存使用。从开发的角度来看,命令解析方式的变化以及统一变量语法引入了新的代码编写方法,这在早期版本的 PHP 中是不可能的。同样,任何不知道 PHP7 中如何解释命令的开发人员都可能陷入看不见的陷阱,从而导致代码出现故障。因此,本书的任务是说明编写代码的新的令人兴奋的方法,并指出与以前版本的 PHP 不兼容的任何方面。还需要注意的是,本书同时介绍了 PHP7.0 和 7.1。

这本书涵盖的内容

水果挞 T.0.第 1 章 A1 T1,A2 T2。建立基础 Ty3T3,帮助您开始 PHP 7 开发环境的初始设置和配置。我们还将展示一些具有冲击力的初始配方,展示 PHP7 的新特性。

第 2 章使用 PHP7 高性能特性,深入探讨了该语言的新特性。我们将向您介绍抽象语法树和统一变量语法等概念,您将了解这些概念如何影响日常编程。接下来是利用 PHP7 性能改进的方法,包括foreach()循环处理中的重大新变化。

第 3 章处理 PHP 函数式编程强调 PHP 如何始终能够处理程序员定义的函数库而不是类,PHP7 也不例外。在本章中,我们将更深入地了解函数处理方面的改进,包括提供涉及基本数据类型的“类型提示”的能力,例如输入和输出的整数、浮点、布尔和字符串。我们还将广泛介绍标准 PHP 库中的迭代器,以及如何利用改进的生成器处理来编写自己的迭代器。

第 4 章使用 PHP 面向对象编程,探索 PHP 面向对象编程的基础知识。快速超越基础,您将学习如何使用 PHP 名称空间和特性。将涵盖架构方面的考虑,包括如何最佳使用接口。最后,我们将讨论一个令人兴奋的 PHP7 新特性,即匿名类,以及它的实际使用示例。

第 5 章与数据库交互,探索应用程序从数据库读写的能力,这是任何现代网站的关键部分。然而,人们普遍误解的是正确使用 PHP 数据对象(PDO)扩展。本章将全面介绍 PDO,这反过来将允许您的应用程序与大多数主要数据库交互,包括 MySQL、Oracle、PostgreSQL、IBM DB2 和 Microsoft SQL Server,而无需学习任何其他命令集。此外,我们还将介绍高级技术,例如使用域模型实体、执行嵌入式辅助查找以及使用 PHP7 实现 jQuery 数据表查找。

第 6 章构建可伸缩网站深入探讨了 PHP 开发人员构建交互式网站时所面临的一个经典问题,即硬编码 HTML 表单,然后进行维护。本章介绍了一种简洁高效的面向对象方法,它只需最少的代码,就可以生成整个 HTML 表单,这些表单可以在初始配置中轻松更改。另一个同样令人烦恼的问题是如何过滤和验证表单中发布的数据。在本章中,您将学习如何开发一个易于配置的筛选和验证工厂,然后将其应用于任何传入的 post 数据。

第 7 章访问 Web 服务涵盖了对 Web 开发越来越重要的内容—发布或使用 Web 服务的能力。本章介绍两种关键方法:SOAP 和 REST。您将学习如何实现 SOAP 和 REST 服务器及客户端。此外,本文介绍的方法使用适配器设计模式,它允许相当程度的定制,这意味着您不会被锁定在特定的设计范式中。

第 8 章处理日期/时间和国际方面,帮助您应对万维网(WWW)发展带来的激烈竞争,导致越来越多的客户希望将业务拓展到国际市场。本章将让您了解国际化的各个方面,包括表情符号的使用、复杂字符和翻译。此外,还将向您展示如何获取和处理区域信息,包括语言设置、数字和货币格式以及日期和时间。此外,我们还将介绍一些食谱,向您展示如何创建可以处理重复事件的国际化日历。

第 9 章开发中间件讲述了开源社区目前最热门的话题——中间件。顾名思义,中间件是一种可以快速到位的软件,它可以为现有应用程序增加价值,而无需更改该应用程序的源代码。在本章中,您将看到一系列实现为 PSR-7 兼容中间件的方法(更多详细信息,请参见附录定义 PSR-7 类),这些方法执行身份验证、访问控制、缓存和路由。

第 10 章了解高级算法有助于您理解,作为一名开发人员,鉴于大量程序员和公司在竞争同一业务,掌握关键的高级算法是极其重要的。在本章中,使用 PHP7,您将学习 getter 和 setter、链表、冒泡排序、堆栈和二进制搜索的理论和应用。此外,本章将探讨如何使用这些技术来实现搜索引擎,以及如何处理多维数组。

第 11 章实现软件设计模式,致力于面向对象编程的一个重要方面,即理解关键的软件设计模式。没有这些知识,当你申请一个新职位或试图吸引新客户时,作为一名开发人员,你将处于严重的劣势。本章涵盖了几个至关重要的模式,包括水合作用、策略、映射器、对象关系映射和发布/订阅。

第 12 章提高网络安全解决了当今互联网普遍存在的问题。我们看到网络攻击的频率越来越高,往往造成毁灭性的经济和人身损失。在本章中,我们将介绍坚实的实用方法,如果实施,将使您的网站在安全性和安全性方面得到指数级提升。所涵盖的主题包括筛选和验证、会话保护、安全表单提交、安全密码生成以及验证码的使用。此外,还提供了一个配方,它将向您展示如何在不使用 PHP mcrypt 扩展的情况下加密和解密数据,PHP 7.1 中不推荐使用该扩展(最终将从该语言中删除)。

第 13 章最佳实践、测试和调试介绍了代码的最佳实践和调试,以生成运行良好的代码。在本章中,您还将学习如何设置和创建单元测试、处理意外错误和异常以及生成测试数据。介绍了几个新的 PHP7 特性,包括 PHP7 如何“抛出”错误。值得注意的是,最佳实践贯穿全书,而不仅仅是本章!

附录定义了 PSR-7 类,阐述了最近接受的 PHP 标准建议 7,该建议定义了与中间件结合使用的接口。在本附录中,您将看到 PSR-7 类的可靠实现,这些类包括值对象,如 URI、正文和文件上载,以及请求和响应对象。

这本书你需要什么

要成功实现本书中介绍的方法,您只需要一台计算机、100MB 的额外磁盘空间和一个文本或代码编辑器(而不是文字处理器!)。第一章将介绍如何设置 PHP7 开发环境。拥有一个 web 服务器是可选的,因为 PHP7 包括一个开发 web 服务器。不需要 Internet 连接,但下载代码(如 PSR-7 接口集)并查看 PHP7.x 文档可能会很有用。

这本书是给谁的

这本书是为软件架构师,技术经理,从中级到高级的开发人员,或者只是好奇的人准备的。您需要具备 PHP 编程的基本知识,尤其是 OOP。

章节

在这本书中,你会发现几个经常出现的标题(准备,如何做,如何工作,还有更多,请参见)。

为了明确说明如何完成配方,我们使用以下章节:

准备好了吗

本节告诉您配方中的预期内容,并介绍如何设置配方所需的任何软件或任何初步设置。

怎么做。。。

本节包含遵循配方所需的步骤。

它是如何工作的。。。

本节通常包括对上一节中发生的情况的详细解释。

还有更多。。。

本节包括有关配方的附加信息,以使读者更了解配方。

另见

本节提供了有关配方的其他有用信息的有用链接。

公约

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

文本中的代码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄如下所示:“最后,将第三个项目符号中定义的类LotsProps放在一个单独的文件chap_10_oop_using_getters_and_setters_magic_call.php中。”

代码块设置如下:

protected static function loadFile($file)
{
    if (file_exists($file)) {
        require_once $file;
        return TRUE;
    }
    return FALSE;
}

当我们希望提请您注意代码块的特定部分时,相关行或项目以粗体显示:

$params = [
  'db'   => __DIR__ . '/../data/db/php7cookbook.db.sqlite'
];
$dsn  = sprintf('sqlite:' . $params['db']);

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

cd /path/to/recipes
php -S localhost:8080

新术语重要词语以粗体显示。您在屏幕上看到的文字(例如,在菜单或对话框中)显示在如下文本中:“单击购买按钮时,会显示初始购买信息。”

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

提示

提示和技巧如下所示。

读者反馈

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

要向我们发送总体反馈,只需发送电子邮件<[feedback@packtpub.com](mailto: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 出版网站上该书网页上的代码文件按钮下载代码文件。在搜索框中输入图书名称即可访问此页面。请注意,您需要登录到您的 Packt 帐户。

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

  • WinRAR/7-Zip for Windows
  • 适用于 Mac 的 Zipeg/iZip/UnRarX
  • 使用内置 Linux 实用程序或 7-Zip/PeaZip

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

勘误表

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

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

盗版

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

请致电<[copyright@packtpub.com](mailto:copyright@packtpub.com)>与我们联系,并提供可疑盗版材料的链接。

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

问题

如果您对本书的任何方面有任何问题,可以通过<[questions@packtpub.com](mailto:questions@packtpub.com)>与我们联系,我们将尽力解决该问题。