PHP 7 编程实战(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-22 21:19:20

点击下载

作者:苏宝龙

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

PHP 7 编程实战

PHP 7 编程实战试读:

前言

PHP 7以破纪录的速度席卷了开源社区,吸引了许多人的注意力。核心开发团队对这门编程语言做出了很大的改进,但仍然为该语言保留了高度的向下兼容性。这些改进几乎能够为PHP程序提高200%的速度,并能够大幅度地减少内存占用量。从开发的观点看,对命令和统一变量语法(uniform variable syntax)解析方式的改进引入了多种编写代码的新方式,这些方式在以前的 PHP 版本中是无法使用的。同时,如果开发者不了解PHP 7解析命令的方式,就会掉到隐藏的陷阱中,导致程序发生故障。因此,本书的使命是介绍这些新的令人激动的代码编写方式,以及这些新方式与以前的 PHP 版本不兼容的地方。需要着重指出的一点是,本书既介绍PHP 7.0也介绍PHP 7.1。

本书主要内容

第1章介绍入门知识,帮助你安装和配置PHP 7的开发环境。还介绍了几个代表性很强的示例程序,通过它们来展示PHP 7的几个新功能。

第2章深入介绍了这门语言的新增功能,其中包括抽象语法树(Abstract Syntax Tree)和统一变量等语法,还介绍了这些新增功能是怎样对常规编程方式产生影响的。本章还通过几个示例介绍了PHP 7在性能方面的提升,包括在foreach()循环中的大幅度改进。

第3章着重介绍PHP一直拥有的使用程序员定义的函数库(而不是类库)的功能,当然PHP 7也不会例外。本章会详细介绍对函数处理方式的改进,其中包括类型提示(type hint)功能,而且可以将该功能应用于基础数据类型(如整型、浮点型、布尔型和字符型)。还介绍了PHP标准库(Standard PHP Library,SPL)中的许多迭代器,以及利用已改进的生成器自己编写迭代器的方式。

第4章介绍PHP面向对象编程功能的基础知识。快速掌握这些基础知识后,就可以学习使用PHP命名空间和特性(trait)的方式。本章还会介绍需要考虑的软件架构问题,例如怎样以最佳方式使用接口。最后会通过几个实践范例介绍PHP 7令人激动的新增功能:匿名类。

第5章介绍从数据库读取数据和向数据库中写入数据的方式,这是现代网站的关键功能。许多人对PDO(PHP Data Objects,PHP数据对象)扩展的用法有误解,本章会详细介绍PDO扩展,使你不必学习额外命令集就能够编写出能与绝大多数数据库(如MySQL、Oracle、PostgreSQL、IBM DB2和Microsoft SQL Server)进行交互的应用程序。此外,本章还会介绍一些高级技巧,如使用领域模型实体实现嵌入式二次查询,以及使用PHP 7程序实现jQuery DataTable插件查询操作。

第6章详细分析架设交互式网站的PHP开发者们所面对的一个典型问题——通过硬编码方式创建表单,之后又不得不对表单进行维护。本章介绍一种简捷、高效的面向对象处理方式,使用最少量的代码生成全部 HTML 表单,而且可以通过初始配置轻松修改这些表单。PHP开发者会面对的另一个难度不相上下的问题是,怎样过滤和验证用户通过表单提交的数据。通过学习本章,你可以开发出易于配置的过滤器和验证器,它们可应用于任何收到的数据。

第7章介绍在网页开发中变得越来越重要的功能——提供和访问Web服务。本章会介绍两种重要的提供和访问Web服务的方式:SOAP和REST。通过阅读本章,你可以学会实现SOAP和REST客户端与服务器的手段。此外,本章会介绍几个使用适配器设计模式开发的示例程序,这些程序具有非常大的自定义空间,这意味着你不会被局限在特定的设计范式中。

第8章会帮助你应对互联网迅猛的增长势头,让客户能够通过你编写的国际化网页将业务扩展到国际化市场中。本章会介绍所有最新的国际化网页功能,其中包括表情符号的用法、字符绘画和将网页内容翻译成多种语言的手段。本章还会介绍获取和处理用户所在地信息的方式,这些信息包括浏览网页的用户的语言设置、数字和货币格式,以及日期和时间格式。本章会通过一些示例介绍创建国际化日历的方式,该日历可处理反复出现的事件。

第9章介绍当前在开源社区中最火爆的话题——中间件。顾名思义,中间件是一种能够在不更改应用程序源代码的情况下,为已开发出的应用程序增加价值的“嵌入式”软件。本章会通过一系列示例来介绍在遵循PSR-7编程规范(附录详细介绍了PSR-7类)的前提下编写中间件的方式,这些中间件可以执行验证、访问控制、缓存和路由操作。

第10章介绍重要的高级算法。如果有许多程序员和公司竞争同一项业务,那么掌握这些高级算法对你来说就是至关重要的。本章会介绍如何使用PHP 7的理论知识和实用技巧来编写应用程序的读取器和设置器、链表、冒泡排序程序、堆栈和二分查找程序。本章还会介绍使用这些技巧实现搜索引擎和处理多维数组的方式。

第11章介绍面向对象程序设计理论的重要组成部分——软件设计模式。如果没有掌握这些知识,那么在尝试获取新职位或客户时,就会处于劣势地位。本章会介绍多种重要的软件设计模式,其中包括水合器(hydrator)、策略、映射器、对象关联映射和发布/订阅等设计模式。

第12章介绍当前互联网中常见的攻击手段。随着网络攻击事件越来越多,网络攻击造成的经济损失和泄露的私人信息也越来越多。本章会通过一些示例介绍实用技巧,使用这些技巧可以使网站的安全性和保险性成倍增加。本章还会介绍过滤和验证操作、为 PHP 会话提供安全防护的方式、提高表单提交操作安全性的方式、生成具有安全性的密码的技巧,以及使用验证码的手段。此外,本章会通过示例介绍在不使用 PHP 加密扩展库mcrypt的情况下(mcrypt扩展已被PHP 7.1弃用,而且最终会被从该语言中移除),实现加密/解密功能的方式。

第13章介绍可帮助你编写出优质代码的最佳编程习惯和调试技巧。本章还会介绍创建和设置单元测试、处理预料之外的错误和异常,以及创建测试数据的方式。本章也介绍了PHP 7的几个新增功能,其中包括PHP 7解释程序抛出错误的功能和方式。请注意,本书通篇都会介绍最佳编程习惯,而不仅限于这一章!

附录介绍最近被普遍接受的第7号PHP推荐标准,即PSR-7,也可称为PSR-7编程规范,该编程规范定义了与中间件联合使用的接口。本附录介绍实现PSR-7类的可靠方式,这些PSR-7类包括值对象(如URI、流式请求和回应的主体,以及上传文件操作)和代表请求与回应的对象。

做书中实验所需的硬件条件

要做本书中介绍的示例实验,你的计算机需要拥有100MB以上的硬盘可用空间,并安装一个文本或代码编辑器(注意这不是指文字处理软件)。第1章介绍了设置PHP 7开发环境的方式。你可以自己搭建Web服务器,也可以不搭建Web服务器,因为PHP 7解释程序自带了一个在开发环境中使用的Web服务器。是否联网也不做要求,但是如果联网就可以下载代码(如PSR-7接口),以及阅读PHP 7.x的说明文档。

本书面向的读者

软件架构师、技术主管、中高级软件开发者和爱好者都适合阅读本书。在阅读本书之前,你需要先具备PHP程序设计的基础知识(OOP方面的尤为重要)。

本书各章标题结构

本书会反复出现“准备工作”“具体处理过程”“具体运行情况”“补充说明”和“扩展”等标题。

这些标题都用于说明完成示例实验的步骤,下面是它们的具体含义。

准备工作

该标题下方是介绍示例实验的主要内容,以及该实验的初步设置和所有软件设置。

具体处理过程

该标题下方是做示例实验的具体步骤。

具体运行情况

该标题下方是前面具体步骤所介绍代码的详细运行情况。

补充说明

该标题下方是与前面介绍的示例程序有关的补充资料,以便使你进一步了解这些示例程序。

扩展

该标题下方是与前面介绍的示例程序有关的网站链接。

本书约定

本书使用多种字体区分多种类型的信息,下面详细说明这些字体和相应的信息类型。

代码、数据库表的名称、文件夹的名称、文件名、文件的扩展名、目录的名称、虚拟的URL、用户输入的信息和Twitter微博的用户名将使用等宽字体,例如:“将步骤3介绍的LotsProps类添加到独立文件chap_10_oop_using_getters_and_setters_magic_call.php文件中。”

代码段部分使用等宽字体,例如:

当着重介绍一部分代码时,会使用粗体将其标出,例如:

在命令行界面中输入和输出的信息使用下面的字体:

新术语和重要词汇使用黑体(中文)或加粗(英文)表示。菜单和对话框中的英文界面词也会加粗,例如:“当Purchases(购物信息)按钮被单击后,初始的购物信息就会显示出来”。这部分内容介绍警告和需要注意的重要信息。这部分内容介绍提示和小窍门。

读者服务

轻松注册成为博文视点社区用户(www.broadview.com.cn),扫码直达本书页面。

·提交勘误:您对书中内容的修改意见可在提交勘误处提交,若被采纳,将获赠博文视点社区积分(在您购买电子书时,积分可用来抵扣相应金额)。

·交流互动:在页面下方 读者评论 处留下您的疑问或观点,与我们和其他读者一同学习交流。

页面入口:http://www.broadview.com.cn/32772第1章 基础知识

本章包括以下要点:

➢ 安装PHP 7的注意事项

➢ 内置PHP Web服务器的使用方法

➢ 定义用于测试的MySQL数据库

➢ 安装PHPUnit

➢ 实现类自动加载

➢ 扫描网站

➢ 创建深层次的网页扫描器

➢ 创建将PHP 5代码转换为PHP 7代码的代码转换器本章主要内容简介

本章介绍了PHP 7语言的快捷入门知识,掌握了这些内容,你就能够开始编写PHP 7程序了。在学习本章内容前,你需要先具备足够的PHP语言和程序设计基础知识。尽管本书不会事无巨细地介绍PHP的安装过程,但考虑到PHP 7还是一个比较新的版本,所以我们会尽最大努力详细介绍在安装PHP 7的过程中可能出现的难点和注意事项。安装PHP 7的注意事项

一般可以通过3种方式获得PHP 7:

➢ 下载源代码并直接通过源代码进行安装

➢ 安装已编译好的二进制文件

➢ 安装*AMP(如XAMPP、WAMP、LAMP和MAMP等)软件包

具体处理过程

上面的3种方式是按照由难至易的顺序介绍的。第一种方式最难操作,但这种方式会让你在增加和减少PHP 7组件时获得最大的自由度。

通过源代码直接安装

要使用这种安装方式,首先需要拥有一个C语言编译器。如果你使用的操作系统是Windows,那么就可以使用经过考验并广受欢迎的免费编译器MinGW。MinGW是以通过GNU计划开发出的GNU Compiler Collection(GCC)编译器集合为基础的。你也可以选择购买需付费的编译器(如Borland公司出品的Turbo C),当然,Windows环境中的开发者可能会更偏爱Visual Studio编译器。然而,Visual Studio专门用于开发C++程序,因此在编译PHP代码时,就需要将其设置为C语言模式。

如果你使用的是苹果公司的Mac机,那么最佳解决方案是安装Apple Developer Tools开发工具集。你可以使用Xcode集成开发环境(Integrated Development Environment,IDE)编译PHP 7代码,也可以通过终端窗口运行gcc。如果你使用的是Linux操作系统,同样可以通过终端窗口运行gcc。

当通过终端窗口或命令行界面编译源代码时,通常应执行下列处理步骤:

1.配置编译器

2.添加源代码

3.进行测试

4.进行安装

要详细了解各个配置选项(即在运行configure命令时会出现的选项),可使用help选项:

configure --help

下表列出了配置阶段可能出现的错误:续表

通过已编译好的二进制文件安装PHP 7

此处的已编译好的二进制文件是指,由一些富有分享精神的开发者使用PHP 7的源代码编译出的一系列二进制文件。

如果你使用的是Windows,可浏览http://windows.php.net/。在该页面的左侧可以看到一些帮助进行版本选择的提示,如thread safe、non-read safe等。可以单击下载链接并找到与你的开发环境匹配的.zip文件。下载了.zip文件后,可以将这些文件解压到你选择的文件夹中,将php.exe文件添加到你的安装路径中,并使用php.ini文件配置PHP 7。

要在Mac OS X系统中安装已编译好的二进制文件,最好使用软件包管理系统。在安装PHP时,我们推荐使用下列软件包管理系统:

➢ MacPorts

➢ Liip

➢ Fink

➢ Homebrew

如果你使用Linux操作系统,应根据你使用的Linux版本选择软件包管理系统。下表列出了各个Linux版本中安装PHP 7的不同位置。续表

安装*AMP软件包

AMP是Apache、MySQL和PHP(也包括Perl和Python)的首字母缩写词。*AMP中的*代表与Linux、Windows和Mac等操作系统对应的版本,即LAMP、WAMP和MAMP。这种安装方式通常是最简单的,但在安装PHP时获得的自由度也是最小的。从另一方面看,你也可以随时根据需要通过修改php.ini文件增加安装内容。下表列出了一些广受欢迎的*AMP软件包:

上表介绍了一些*AMP软件包,其中的*分别代表W(即Windows[1]的首字母)、M(即Mac的首字母)和L(即Linux的首字母)。

补充说明

当你通过软件包安装已编译好的二进制文件时,仅能安装PHP的核心扩展。PHP的非核心扩展必须单独安装。

值得注意的是,在云计算平台上安装PHP 7时,通常会根据已编译好的二进制文件确定大致的安装过程。因此,你应该先查明你所处云环境中的虚拟机运行的是Linux还是Mac,又或者是Windows,然后根据本章前面介绍知识,执行适当的安装步骤。

如果你无法获得PHP 7已编译好的二进制文件,可以随时通过PHP 7源代码安装,也可以选择某一个*AMP软件包进行安装(请参阅下一节介绍的内容),还可以使用Personal Package Archive (个人软件包档案,PPA)方式替代在Linux中使用的安装方式。因为PPA源代码没有经过严格的检验筛选过程,所以其安全性是一个大问题。你可以通过浏览http://askubuntu.com/questions/35629/are-ppas-safeto-add-to-mysystem-and-what-are-some-red-flags-to-watch-out-fo,详细了解使用PPA源代码的安全注意事项。

扩展

通过浏览http://php.net/manual/en/install.general.php,可以了解综合的PHP安装注意事项,以及与3种主流操作系统平台(Windows、Mac和Linux)对应的操作指南。

通过浏览http://www.mingw.org/,可以了解MinGW。

通过浏览https://msdn.microsoft.com/en-us/library/bb384838,可以获得使用Visual Studio编译C程序的操作指南。

另一种测试PHP 7的方式是使用虚拟机。下面列出了这类颇为有用的工具和获取这些工具的网址:

➢ Vagrant:https://github.com/rlerdorf/php7dev(该页面提供的php7dev文件是一个Debian 8版本的Vagrant镜像,该镜像已经被配置好,可以用于测试PHP应用和跨多个PHP版本开发扩展)。

➢ Docker:https://hub.docker.com/r/coderstephen/php7/(该页面提供了PHP 7 Docker容器)。内置PHP Web服务器的使用方法

除了进行单元测试和通过命令行界面直接运行PHP外,使用Web服务器测试应用程序也是一种显而易见的方式。对于开发周期较长的项目来说,为了逼真地模拟真实的运行环境,配置在虚拟主机上运行的Web服务器是有好处的。为各种Web服务器(如Apache、Nginx等)配置虚拟主机的内容已经超出了本书涵盖的范围。另一种简单易用且快捷的方式是使用内置的PHP Web服务器,本节将详细介绍这种方式。

具体处理过程

1.要启动PHP Web服务器,需要先切换到存储PHP源代码的根目录。

2.然后,必须设置主机名称或IP地址,但端口号的设置不是必要的。使用下面的示例可以运行本书介绍的PHP Web服务器:

屏幕上会显示下图所示的内容:

3.当这个内置的Web服务器不断对服务请求做出回应时,可以查看访问它的信息、HTTP状态码和请求信息。

4.如果你需要将该Web服务器的文件根目录设置为另一个目录,可使用参数-t。该参数的后面必须紧跟一个合法的目录路径。这个内置的Web服务器会将该目录视为该Web服务器的文件根目录,这样做有助于提高安全性。为了获得更高的安全性,某些框架(如Zend Framework)要求将Web服务器的文件根目录设置为不同于真正存储网站源代码的目录。

下面是一个使用-t参数的例子:

下图是这个示例的输出结果:定义用于测试的MySQL数据库

为了帮助你测试本书介绍的源代码,我们在https://github.com/dbierer/php7cookbook提供了 SQL 文件和示例数据。本书示例使用的数据库名称为php7cookbook。

具体处理过程

1.定义一个MySQL数据库并将之命名为php7cookbook。新建一个数据库管理员账号,将该用户账号的名称设置为cook并将登录密码设置为book。下表列出了这些设置:

2.下面是用于创建数据库的SQL语句示例:

3.将示例数据导入到新建的数据库中。这些示例数据包含在php7cookbook.sql文件中,在https://github.com/dbierer/php7cookbook/blob/master/php7cookbook.sql可以下载该文件。安装PHPUnit

单元测试可能是最流行的测试PHP代码的方式。大多数开发者都赞同这一观点:以适当方式开发出的项目都必须经过一系列严格的测试。但很少有开发者会实实在在地编写这些测试内容。只有极少数幸运的开发者拥有专门为他们编写测试程序的团队!然而,经过数月的与测试团队的摩擦冲突后,这些开发者中的幸运儿们也会牢骚满腹。无论如何,任何介绍PHP的书籍都不会对测试只字不提。

在https://phpunit.de/上可以获得PHPUnit的最新版本。PHPUnit 5.1及以上版本都支持PHP 7。单击你想要下载的版本的链接后,就能够下载一个phpunit.phar文件,然后就可以使用这个文件执行命令:phar命令是PHP archive的缩写词。这项技术源于UNIX中的tar命令。一个phar文件是一个含有多个PHP文件的集合,为了便于使用,这些PHP文件被封装到了一个文件中。实现类自动加载

当使用面向对象的编程方式(OOP)开发PHP软件时,我们建议将每个类放在它本身的文件中。这样做的好处是有利于长期维护并能够提高可读性。这样做的坏处是必须将每个类的定义文件都包括到主程序文件中(即在主程序文件中添加include语句或该语句的各种变体)。为了解决这个问题,开发者们为PHP语言添加了一种机制,通过该机制可以在不专门使用包含命令的情况下实现自动加载任何类。

准备工作

实现PHP类自动加载功能的最低要求是定义一个全局的__autoload()函数。这个函数拥有神奇的功能,当需要加载某个类而[2]该类没有被包含到主程序中时,该函数就会被PHP引擎自动调用。当__autoload()函数被调用时,需要加载的类的名称会被用作调用该函数的参数(就像你手动定义了它们一样)。如果你使用了PHP中的命名空间,那么这个类的完整的命名空间名称都会被作为参数传递。因为__autoload()是一个函数,所以它必须处于全局命名空间之中,因而,该函数的使用会有一些局限性。因此,在下面的示例中我们会使用spl_autoload_register()函数,它会为我们提供更多的灵活性。

具体处理过程

1.本例介绍的类是Application\Autoload\Loader。为了同时利用PHP命名空间和类自动加载功能的优点,我们创建了Loader.php文件并将其放置在/path/to/cookbook/files/Application/Autoload文件夹中。

2.下面先介绍仅加载一个文件的方式。在调用require_once()函数前,我们先使用 file_exists()函数进行检查。这样做是因为如果要加载的文件不存在,require_once()函数会生成一个致命错误,而PHP 7新增的错误处理功能无法检测到这类错误:

3.我们可以在执行调用操作的程序中测试函数loadFile()返回的值,如果在检查完一组备选目录后没有找到可加载文件,则抛出一个异常。你可能已经注意到这个类中的方法和属性都是静态的。这会使我们在注册执行自动加载操作的方法时获得更多自由,因此让我们像处理单例对象(Singleton)一样处理Loader类。

4.下面定义调用loadFile()函数的方法,并为了执行根据类的完整命名空间名称查找文件的操作,定义真正执行该操作的逻辑。该方法会通过将PHP命名空间的分隔符\转换为与当前所处服务器对应的目录分隔符,并加上.php后缀,获取文件的名称:

5.该方法会使用self::$dirs语句检查一组目录,将每个目录用作推导文件名称的起点。如果没有找到目标文件,该方法最终会尝试从当前目录加载目标文件。如果该操作还是没有成功,该方法就会抛出一个异常。

6.下面我们要创建一个能够向测试目录列表中添加更多目录的方法。注意,如果该方法使用数组提供值,那么就会用到array_merge()函数。否则,只需将目录字符串添加到self::$dirs数组中:

7.本步骤是最重要的一步:要把我们编写的autoload()方法注册为PHP标准库(Standard PHP Library,SPL)自动加载器。通过init()方法使用spl_autoload_register()函数可以做到这一点:

8.现在我们可以定义__construct()函数,该函数会调用 init()方法,即self::init($dirs)。这使我们能够根据自己的意愿创建一个Loader类的实例:

具体运行情况

为了使用我们刚刚编写的类自动加载器,需要执行require Loader.php命令。如果你的命名空间文件没有放在当前的目录中,还需要执行Loader::init()命令,并需要提供额外的目录路径。

为了确保这个自动加载器工作正常,还需要使用一个类进行测试。这个测试类是/path/to/cookbook/files/Application/Test/TestClass.php,下面是它的定义:

下面创建示例代码文件chap_01_autoload_test.php,以便测试这个自动加载器:

然后,获取一个还没有被加载的类的实例:

最后,尝试获取一个不存在的类。注意,这样做会使PHP抛出一个错误:扫描网站

通常,扫描网站并通过特定的标签提取信息是一件有趣的事情。使用这项基本功能可以在页面中进行搜索,以便获取有用的信息。有时需要获取一系列标签和 SRC属性(或者标签和HREF属性),有时需要获取的信息五花八门,一切皆有可能。

具体处理过程

1.获取目标网站的内容。乍看之下,我们好像需要发送cURL请求,或者直接使用file_get_contents()函数。使用这两种方式都有一个问题,那就是归根结底会迫使我们进行大量的字符串操作,这非常像滥用令人恐惧的正则表达式。为了从根本上避免该问题,我们只需利用已经在PHP 7中出现的DOMDocument类。因此,可以创建一个DOMDocument实例,并将它设置为UTF-8格式。我们无须考虑空格,使用便利的loadHTMLFile()方法就可以将网站的内容加载到该对象中:注意,我们在调用loadHTMLFile()方法的代码前面添加了一个@符号。这样做是为了避免像PHP 5那样经常提取难以理解的错误代码(即错误警告的内容)。更确切地说,当解析器遇到编写错误的HTML代码时,@符号会过滤掉解析器生成的报错警告。如果我们提取这些错误警告并将它们记录下来,那么也可以为我们编写的这个Hoover类添加诊断功能。

2.提取感兴趣的标签。可以使用getElementsByTagName()方法实现这一点。如果你想要提取所有标签,可以将*用作该方法的参数:

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载