Web网站的专门化和多元化发展趋势,要求网页编程语言必须满足编写出运行速度快、节省资源且具有较高安全性动态网页的需求。本书介绍的PHP 7网页编程语言就是其中的佼佼者。
本书由13章构成,详细介绍了PHP 7的新增功能和中高级PHP技术,包括安装和配置PHP 7开发环境的入门知识、PHP 7的新增功能、PHP中的函数式编程功能、PHP面向对象编程功能的基础知识、使用命名空间和特性(trait)的方式、从数据库读取数据和向数据库中写入数据的方式、创建HTML表单元素的类的方式、过滤与验证数据的方式、实现SOAP和REST客户端与服务器的手段、PHP最新的国际化网页功能、遵循PSR-7编程规范编写中间件的方式、使用PHP实现高级算法(如链表、冒泡排序程序、堆栈和二分查找程序)的方式、软件设计模式、当前互联网中常见的攻击手段和相应的防护手段、加密/解密技术,以及可帮助你编写出优质代码的最佳编程习惯和调试技巧。此外,附录还介绍了PSR-7编程规范。
80+真实案例 全覆盖7.X高级功能 锁定旧版不兼容代码
译者序
互联网(internet,又称为因特网)始于20世纪60年代末的美国,最初仅用于军事和科研。1989年3月12日万维网(World Wide Web,无数个Web服务器和客户端的集合)在internet中诞生。大批富豪风起云涌般随之崛起,如Amazon的创始人杰夫·贝佐斯、Yahoo的创始人杨致远、百度的创始人李彦宏以及阿里巴巴的创始人马云等。人们对计算机网络的运用有了翻天覆地的变化。了解新闻不再需要买报纸、看电视,上网(即浏览网站,也就是访问Web服务器)就可以;了解百科知识(如查字典上的解释、医药信息、电子信息、机械知识甚至出行路线),上网就可以;买东西,上网就可以。上网还可以娱乐,如看电视剧、看电影、玩电子游戏。简言之,万维网已经成为人类生活必不可少的组成部分。
万维网诞生之初,Web网站的内容非常简单:文字和图片。因此对网页编程语言的要求也非常简单——能够美观地为浏览网站的用户显示出文字和图片即可。简单的HTML语言足以胜任这项工作。但随着万维网的不断发展,网站的功能也变得越来越专门化(例如专门提供娱乐的视频、游戏网站,以及专门提供网页搜索服务的网站)和多元化(例如购物网站、聚集各种爱好者的网站),各种网站的内容和功能也不断丰富。因而对网页编程语言的要求也越来越高。
当前的Web网站要求网页编程语言必须能够编写出运行速度快、节省资源且具有较高安全性的动态网页。PHP符合所有这些要求,下面是它的优点:
? PHP属于开源软件,源代码完全公开。
? 开源软件是免费的,非常省钱。
? 任何程序员都能非常容易地为PHP扩展附加功能。
? 可跨平台,能够和很多免费的平台结合。
? PHP语法简单,非常容易上手,可快速实现从设计一个网页到编写一个Web应用程序的飞越。使用PHP,刚刚成为软件工程师甚至还不是软件工程师的人都能够提交新功能。PHP是为了快速制造新东西而生的(这是维基百科和Facebook选择PHP的原因)。
? PHP将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI程序高很多。PHP可以执行编译后代码,编译可以达到加密和优化代码的目的,使代码运行得更快。
? PHP支持十多种主流与非主流数据库,如:dBase、Informix、mSQL、MySQL、Microsoft SQL Server、Sybase、ODBC、PostgreSQL、Oracle等。其中,PHP与MySQL是绝佳的组合,可以跨平台运行。
? 目前主流技术(如WebService、AJAX、XML等)都支持PHP,因此能够满足应用需求。
? 很多大型门户网站都使用PHP,如淘宝网、网易、新浪等。
? PHP提供了类和对象,实现了面向对象编程功能。
? 有成熟的开发者社区支持PHP的研究和发展。
本书的作者Doug Bierer先生是一位拥有三十多年经验的资深软件开发者,他在本书中使用了大量的实践案例。这些范例程序既有实用性也有启迪性,深入浅出地讲解了PHP 7的新增功能和中高级PHP技术。
翻译前沿计算机科学书籍的工作并不轻松,也不是单独一个人能够完成的。在此我要感谢电子工业出版社张春雨等编辑对本书提供的帮助。此外,苏连印、刘桂英、艾玉林、孙召景、张纪悦、张纪华、孙德林、马佳妮、尹晓婷、徐雯、郭昕、陆迎明和孙召恒等也参与了本书的翻译工作,在此对他们表示感谢。
因时间仓促,译者水平有限,本书难免有错漏之处,欢迎广大读者朋友们批评指正。
苏宝龙
推荐序
PHP 7为我们带来了大量的新功能和改进,如抽象语法树(Abstract Syntax Tree,AST)、可被捕捉的错误、标量类型提示功能、返回值数据类型声明以及大幅度的性能提升等。
PHP开发者当前面临的问题不是“我应该使用这些新功能吗”,而是“我怎样才能使用这些新功能开发出品质更好、速度更快的应用程序呢”。
对于使用PHP 4开发应用程序的情景,我记忆犹新。对于PHP开发者来说,那是一段更为纯真的时光,因为可以将PHP代码和HTML代码混合在一起,而且能够将这些代码都放在一个文件中。那时候我们使用导入的函数库,而不使用框架。PHP应用程序基本上只是具有简单基本功能的桌面应用程序,而我们则想方设法把它塞到网页中。
从那以后,PHP应用程序开发经历了多次变革。AJAX、PHPUnit、composer和API-First等新兴框架相继涌现出来。
所有框架(包括上面提到的和其他许多框架)都对PHP开发者们开发应用程序的方式产生了影响。现在,如果你使用将PHP和HTML代码混合到一起的方式来编写以分页式设计模式为基础的应用程序,就会受到嘲笑。那么应该怎样开发程序呢?怎样开发新式PHP应用程序和API呢?怎样利用PHP新增的工具开发出速度更快、品质更优、健壮性更高的应用程序呢?我非常赞赏你能够想到并提出这些问题。
我的好朋友Doug Bierer对这些问题做出了回答。他撰写的这本书不是华而不实的大部头著作,不是你买来放在书架上就不会再碰一下的书。你捧在手中的这本书注定会成为你的参考资料库的一部分。
本书不仅像其他编程书籍一样介绍新增功能的理论知识,而且还会介绍使用这些新增功能解决真实问题的实践方法。你不仅可以从本书汲取知识,而且还能够立刻使用学到的知识解决问题。
如果只是简单使用一下PHP中的高级概念,你无须成为PHP专家。然而,如果你想要成长为一名专业的PHP开发者,就必须学习、理解和掌握这些高级概念。本书会帮助你在自己的专业道路上不断前进。
Cal Evans
Nomad PHP开发者群World Wide Herd研究组首席指导
关于作者
在1971年,Doug Bierer使用Dartmouth BASIC(BASIC语言的原始版本)在一台DEC PDP-8型计算机上编写出了自己的第一个程序,从那以后,他就再也无法与计算机分离了。经过一段体验非常丰富的职业生涯历练后,他在1978年成为了专业的合约程序员,此后他一直在使用BASIC、PL/I、汇编、FORTH、C、C++、dBase/FoxBase/Clipper、Pascal、Perl、Java和PHP语言编写应用程序。Doug Bierer会说四种语言,喜欢在世界各地旅游,在法国、荷兰、英格兰、瑞典、苏格兰和泰国都居住过一段时间。他曾经花数年时间从事Linux系统管理和TCP/IP网络工作。他多才多艺,喜欢音乐和小说,写过60多首歌。他有一个笔名叫作Douglas Alan。
Doug Bierer拥有自己的公司(unlikelysource.com),该公司的主营业务包括咨询、PHP程序开发、网站架设和培训(主要面向Zend Technologies和Rogue Wave Software公司的员工)。
Doug Bierer在https://www.lulu.com/上发表过小说The End, And Then? and Further Indications。他在O'Reilly Media出版社出版的计算机科学著作包括Learning PHP and MySQL、Learning PHP Security、Learning MongoDB和Learning Doctrine。
首要的是,我要将这本书献给我的母亲Betty Bierer,她在2016年5月永远离开了我们。她在我的整个生命历程中不断鼓励我,为我的每次进步欢呼鼓掌(不论这些进步多么微小)。她参加了我举办的所有音乐会、购买了我录制的所有CD,而且即便她对计算机科学毫无兴趣,也仍旧阅读了我撰写的所有书。我还要感谢能够与我同甘共苦的妻子Siri,当我因撰写本书而没有时间陪伴她时,她也无怨无悔(不过她也对我声明下不为例)。最后,我要感谢许多PHP社区的活跃人士,他们帮助我迸发出新式思路和灵感。这些人包括:Matthew Weir O'Phinney、Cal Evans、Daryl Wood、Susie Pollock、Salvatore Pappalardo、Slavey Karadzhov和Clark Everetts。
关于审校者
Salvatore Pappalardo是一位技术天才,在2002年成为了一名软件工程师。他喜欢“从零开始”的开发形式。他爱好广泛,除了喜欢研究计算机技术,还喜欢阅读科幻小说,观赏电影和TED演讲。
Vincenzo Provenza是一位网页开发者,具有使用多种技术和编程语言(主要是PHP和JavaScript)的从业经验。他喜欢旅游和读书。
前言
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文件中。”
代码段部分使用等宽字体,例如:
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
新术语和重要词汇使用黑体(中文)或加粗(英文)表示。菜单和对话框中的英文界面词也会加粗,例如:“当Purchases(购物信息)按钮被单击后,初始的购物信息就会显示出来”。
这部分内容介绍警告和需要注意的重要信息。
这部分内容介绍提示和小窍门。
读者服务
轻松注册成为博文视点社区用户(www.broadview.com.cn),扫码直达本书页面。
? 提交勘误:您对书中内容的修改意见可在提交勘误处提交,若被采纳,将获赠博文视点社区积分(在您购买电子书时,积分可用来抵扣相应金额)。
? 交流互动:在页面下方 读者评论 处留下您的疑问或观点,与我们和其他读者一同学习交流。
页面入口:http://www.broadview.com.cn/32772
下载包可用啰32772 ,解压没问题啦。 如果有问题 需要的加我QQ 2919386060 发给你
为什么压缩包有问题还没有人来回复和维护。
源码压缩包有问题,重新给下
下载资料的解压有问题,可以重新提供一下吗?
为什么没有代码的地址呢?我找了好几天都没有找到