深入理解PHP:高级技巧、面向对象与核心技术(原书第3版) [平装] 9787111451198

配送至
$ $ USD

这是一本帮助中初级PHP程序员修炼成为高级PHP程序员的书,也是一本让PHP程序员能更快、更好地进行应用开发的书。国际知名Web开发专家和技术畅销书作家最新力作,是PHP领域经典著作之一。它从编程技巧(PHP与MySQL的高级技巧)、面向对象(系统的面向对象知识)和扩展(PHP与其他技术的结合使用)三个角度系统讲解和总结了成为中高级PHP程序员应该具备的技术和技能,包含大量实用案例,极具可操作性。 本书共14章,逻辑上分为3个部分:第一部分(第1~3章)总结了PHP编程、Web应用开发和MySQL数据库相关的高级知识和技巧,大部分内容都是中初级程序员可能不熟悉但是又应该掌握的;第二部分(第4~9章)系统讲解了面向对象编程的知识,包含大量深层次话题和生动的实例;第三部分(第10~14章)讲解了PHP的扩展知识以及PHP技术与其他技术的结合使用,如PHP应用与服务器的通信、PHP的命令行界面、PHP中的XML应用,以及PHP应用的调试、测试与性能调优等。
编辑推荐
国际知名Web开发专家和技术畅销书作家最新力作,PHP领域经典著作 从编程技巧、面向对象和扩展三个角度系统讲解和总结了成为中高级PHP程序员应该具备的技术和技能,包含大量实用案例,极具实践指导意义
作者简介
Larry Ullman, 资深Web开发技术专家,国际知名技术畅销书作家,同时他还是经验丰富的培训师、教师、演说家和顾问。他已经出版了20多本著作,被翻译为20多种文字在全球发行,还发表了大量的技术文章,深受读者欢迎。Larry最深受读者喜爱的一点在于,他往往可以将晦涩难懂的专业术语转换为大家耳熟能详的语言。 季国飞,资深Web开发工程师,混迹互联网多年。著有《jQuery开发技术详解》,专注于Web开发技术,目前关注Web前端开发、jQuery和node.js。 朱佩德,网络编程达人,现于华为公司从事驱动开发工作。
目录
目录 译者序 前 言 第1章 高级PHP技巧 1 1.1多维数组 1 1.1.1多维数组排序 1 1.1.2数据库驱动的数组 7 1.2高级函数定义 15 1.2.1递归函数 15 1.2.2使用静态变量 21 1.2.3匿名函数 24 1.3原型文档语法 27 1.4使用printf()和sprintf() 33 1.5回顾和启示 37 第2章 开发Web应用程序 38 2.1模块化一个Web网站 38 2.1.1创建配置文件 39 2.1.2创建HTML模板 46 2.1.3创建索引文件 50 2.1.4创建内容模块 54 2.1.5创建搜索模块 56 2.2使用mod_rewrite优化SEO 59 2.2.1允许.htaccess重写 60 2.2.2激活URL重写 63 2.3调整浏览器缓存 67 2.4回顾和启示 71 第3章 高级数据库概念 73 3.1在数据库中保存会话 73 3.1.1创建会话表 74 3.1.2定义会话函数 75 3.1.3使用新会话处理程序 82 3.2处理美国的邮政编码 87 3.2.1创建邮政编码表 87 3.2.2创建stores表 90 3.2.3计算距离 92 3.3创建存储函数 97 3.4水平显示结果 101 3.5回顾和启示 106 第4章 面向对象编程基础知识 108 4.1面向对象编程的理论 108 4.2定义一个类 109 4.3创建对象113 4.4$this属性 117 4.5创建构造函数 124 4.6创建析构函数 128 4.7使用UML设计类 133 4.8使用phpDocumentor生成更好的文档 135 4.9回顾和启示 140 第5章 高级面向对象编程技术 142 5.1高级理论 142 5.2继承类 144 5.3继承构造函数和析构函数 149 5.4方法的重写 154 5.5访问控制 158 5.6使用范围解析操作符 166 5.7创建静态成员 169 5.8回顾和启示 177 第6章 再谈高级面向对象编程 178 6.1抽象类和方法 178 6.2接口 186 6.3traits 194 6.4类型提示 201 6.5命名空间 206 6.6回顾和启示 212 第7章 设计模式 214 7.1理解设计模式 214 7.2单例模式 216 7.3工厂模式 221 7.4组合模式 227 7.5策略模式 237 7.6回顾和启示 248 第8章 使用既有的类 250 8.1捕获异常 250 8.2扩展Exception类 258 8.3使用PDO 266 8.3.1连接数据库 266 8.3.2捕获异常 267 8.3.3执行简单查询 270 8.3.4执行select查询 271 8.3.5使用预定义语句 275 8.4使用PHP标准库 279 8.4.1文件处理 280 8.4.2迭代器 283 8.4.3数据结构 287 8.4.4自动加载类 288 8.5回顾与启示 291 第9章 面向对象编程实践:CMS系统示例 293 9.1明确编程目标 293 9.2创建数据库 295 9.3制作网页模板 298 9.4编写工具类文件 301 9.5创建Error视图文件 305 9.6定义需要的类 306 9.6.1Page类 306 9.6.2User类 309 9.7创建主页 312 9.8显示页面 317 9.9使用HTML_QuickForm2 321 9.9.1创建表单 322 9.9.2过滤并验证表单数据 323 9.9.3处理表单数据 324 9.10注销登录 330 9.11添加页面 332 9.12回顾与启示 336 第10章 PHP网络编程 338 10.1访问其他网站 338 10.2PHP socket编程 343 10.3使用IP进行地址查询 349 10.4使用cURL 354 10.5创建Web服务 358 10.5.1Web服务介绍 358 10.5.2返回多种类型的数据 359 10.5.3创建简单Web服务 359 10.6回顾与启示 363 第11章 PHP与服务器 364 11.1文件压缩 364 11.2创建cron任务 372 11.3使用MCrypt 374 11.3.1数据加密 375 11.3.2数据解密 380 11.4回顾与启示 383 第12章 PHP的命令行界面 385 12.1测试安装 385 12.2执行一段代码 389 12.3可交互的PHP命令行界面 391 12.4创建命令行脚本 392 12.5运行命令行脚本 396 12.6使用命令行参数 399 12.7接收输入 403 12.8内置服务器 407 12.9回顾和启示 409 第13章 XML和PHP 411 13.1什么是XML 411 13.2XML语法 412 13.3属性、空元素及实体 416 13.4定义XML架构 419 13.4.1包含DTD 420 13.4.2定义元素 420 13.4.3定义属性 421 13.4.4使用XML架构 425 13.4.5合并XSD 425 13.4.6定义元素 425 13.4.7简单类型与复杂类型 427 13.4.8创建属性 427 13.5XML解析 432 13.5.1使用Expat解析XML 433 13.5.2使用SimpleXML 440 13.6创建RSS源 446 13.7回顾与启示 451 第14章 PHP程序调试、测试与性能 453 14.1调试工具 453 14.1.1安装Xdebug 454 14.1.2使用Xdebug 456 14.2单元测试 459 14.2.1安装PHPUnit 460 14.2.2定义测试 461 14.2.3创建测试用例 462 14.2.4运行测试 465 14.2.5建立测试 465 14.3脚本运行分析 469 14.4提高性能 471 14.5回顾与启示 474
序言
前言 以敝人愚见,“高级PHP”指的是持续学习,即当你已经知道如何使用PHP,或许还知道MySQL等类似标准的东西时,应去扩展你的知识范围,包括如何处理不同的事情,如何改进基本的事情,以及如何与PHP结合使用其他技术。总之,你知道如何使用PHP创建一个动态网站之后,应知道如何创建一个更好的网站,这里所说的“更好”包括各个方面。 这就是我写这本书的初衷。本书不会花精力去讨论那些晦涩难懂的PHP语言的深奥特性,也不会去重写PHP、MySQL或者Apache的源码,也没有介绍理论上很有趣但是却没有什么实用价值的代码,而是展示了典型基础知识之外但是有绝对必要(通常也很“酷”)的技巧和方法。 关于本书 简单来说,我尽量让本书的内容对每个中级水平的PHP程序员都是可以理解和使用的。正如我在前面所提到的,“高级PHP”主要讨论的是关于扩展的主题。读者应该已经掌握了全部基础知识(或许在睡梦里也可以检索出数据查询的结果),但是希望进一步深入学习。这意味着想要学习包括面向对象编程(OOP)、使用PEAR(PHP Extension and Application Repository)、在命令行中调用PHP、获取XML知识,或者提高自己在某方面的技术水平。 在我看来,高级PHP应该覆盖以下三个有些相关的知识领域: 把已经会做的事情做得更好、更快和更加安全。 学习面向对象编程。 使用PHP和其他技术做符合标准的东西(比如网络编程、单元测试或者XML)。 这本书可以大致分为3个部分。前面3章涵盖了通常意义上的高级PHP知识,包括编程技巧、Web应用程序开发和数据库应用。这些章节涵盖了平均水平的PHP程序员可能不太熟悉但是又应该了解的一些知识。在阅读的过程中,你也可以看到很多有用的代码。 接下来的6章主要把精力放在面向对象编程上。这一部分占到本书大概一半的篇幅。我们将从最基础的知识开始讲解面向对象编程,然后深入到更多比较深层次的话题,最后展示一些真实生动的实例。 最后5章都是名为类似“PHP和……”这样的章节,包括以下主题: 与网络服务器通信 与主机服务器通信 使用命令行界面 XML 调试、测试和性能问题 本书中使用的大部分例子都试图去适应真实的使用场景,而不像你可能在其他的书籍或者教程、手册中看到的代码那样基本没什么用处。我也同样认可代码说明一切的理念,最终,你不但可以看到示例是如何实现的,同时也可以看到如何把这些新的技巧和想法应用到你自己的项目中。 不像我所写的其他很多书那样,你并不需要按照章节顺序来阅读本书,至少是本书中的绝大部分。个别章节可能会假设你已经事先阅读了其他的章节。例如,介绍面向对象编程的几章,就有个循序渐进的过程。一些后面的章节也会引用在前面章节中完成的示例程序。如果你先阅读了后面的章节,你需要做的只是翻到前面的章节去寻找后面章节所需要的数据库设置或者一些脚本。 最后说明一点,我将在本书的脚本中使用HTML5取代HTML。我保证还会用到一些CSS。我不会在本书中讨论它们中的任何一个话题(当然,坦白地说,这些内容并不一定使用得十分完美)。如果你对这些话题不是很熟悉,或许你需要去找些其他的在线资源或者比较好的书籍(比如Elizabeth Castro编写的Visual QuickStart Guides)参考一下。 本版的更新 新版中我设定了三个目标: 大大扩展了面向对象编程的覆盖范围。 介绍新的、最近流行的技巧,比如单元测试以及调试技巧。 去掉一些过时的或者在我的其他书中已经全面讲述过的章节。 到目前为止,最大的改变就是增加了对于面向对象编程的覆盖范围,增加了一些额外的材料,包括使用一章篇幅专门讲述设计模式。同样,也有一章使用面向对象思想的例子,用于取代之前的面向过程编程的代码。 当然,本书中所有的代码和文字都已经进行过更新、编辑以及改进。换句话说,本书会使用HTML5以及更优化的CSS,或者在解释复杂的问题和实例时做些改进。 和我的其他书相比 那些通过我的另一本书《PHP for the Web: Visual Quick-Start Guide》找到本书的读者,可能会觉得本书的内容有些超过他们的阅读范围。本书确实需要读者对PHP标准编程有个比较好的了解,特别是调试代码,但是也不意味着你将本书束之高阁。如果你发现目前的知识不足以阅读本书,你可以看看我的另一本书《PHP and MySQL for Dynamic Web Sites: Visual QuickPro Guide》(Peachpit Press, 2011)。 如果你已经读了我上面介绍的这本书,或者之前的某一个版本,我希望你会发现本书会让你在函数库和技能方面获得不可思议的提升。 必备条件 正如本书假设的一样,你需要先了解部分PHP编程的基础知识(当然,更重要的一点是,在出现问题的时候会调试),同时也需要读者具有其他一些条件来完成本书的学习过程。对于初学者来说,这意味着需要一台支持PHP的服务器。在本书编写时,PHP的最新版本是5.4,本书大部分代码要求使用至少是PHP 5.3版本。 除了需要PHP以外,我们还经常需要使用一个数据库程序。本书的示例程序使用MySQL,但是在实际应用中使用任何数据库程序都是可以的。另外,为了保证书中部分章节的代码脚本可以运行(特别是最后5章),你的PHP安装环境需要有对相应技术的支持,而且要安装支持这些技术的库文件。幸运的是,PHP 5内置了很多对高级特性的支持。如果某个章节里的示例程序需要特殊的扩展支持,在章节开始的介绍里会有所提及。本书在使用PEAR或者PECL类时就属于这种情况。本书中不会讨论PHP、MySQL以及Web服务器的安装。我们假设读者已经知道,或者已经完成了这些安装操作。 如果你有任何问题或者阅读困难,你可以在网上搜索答案,或者在我的支持论坛(www.Larry Ullman.com/forums/)里留言寻求支持。 除了PHP以外,你还需要一些东西(可能已经有了):一个文本编辑器或者集成开发环境(IDE)、一个FTP应用程序(如果使用远程服务器)以及一个Web浏览器。本书中所有代码已经在Windows XP及Mac OS X系统上测试过,两个操作系统上的运行结果在本书中都有展示。 支持站点 我创建了一个网站用于支持本书:www.LarryUllman.com。这个站点有以下几个功能: 可下载本书的所有脚本。 可下载所有的SQL命令。 可下载所有可用的额外文件(若有必要)。 本书勘误表。 一个你可以从别人那里寻求帮助的论坛。 提供一种直接联系我的途径。 我也会发布一些与本书中涵盖内容相关的文章。 当你使用这个站点的时候,请注意版本问题(本书的标题和版本号会随处可见)。我写的每一本书都有其独立的反馈区域,如果你去错了地方,那么下载的文件可能就和你的书中内容不吻合了。
文摘
第1章 高级PHP技巧 与初学者相比,高级PHP程序员做得更好的一件事情是学着从语言中更生僻或者更难以理解的特性中获益。举例来说,尽管我们已经知道如何使用数组,但是对多维数组未必精通:如创建多维数据、对其进行排序等操作。或许我们已经知道如何编写自定义函数,但是不一定知道如何使用递归以及静态变量。本章将讨论这类问题以及其他一些非基础的概念,比如原型文档(heredoc)的语法以及printf()/sprintf()函数族。 1.1多维数组 由于数组的强大和灵活性,使其在PHP编程中得到了广泛的应用。对于高级应用来说,多维数组经常用来解决其他变量类型不能处理的情况。 第一个例子将展示如何对一个多维数组进行排序。这是一个常见的应用,而且并没有很多人想象得那么难。第二个例子是创建一个数据库驱动的任务列表(to-do list),如图1-1所示。 1.1.1多维数组排序 在PHP中,对多个数组进行排序很简单,这归功于sort()、ksort()等相关函数。使用它们,可以对一维数组进行关键字排序、按值排序、逆排序等。但是这些函数不能用于多维数组(至少不会像大家所想象得那样方便)。 假设有一个数组定义如下: 知识拓展:数组的缩写语法 PHP 5.4中新增了数组的缩写语法,这为创建数组提供了一种简便的方式。使用数组的缩写语法的方式也很简单,将调用array()函数替换为方括号即可。举例: 这是一个简单的二维数组(数组的元素本身也是数组),或许我们需要根据key1(数值排序)或key2(字符顺序排序)。为了对多维数组进行排序,我们需要定义自己的排序函数,然后告诉PHP在调用usort()、uasort()或者uksort()的时候使用我们的自定义排序函数。它必须接收两个参数,并且返回一个值表示哪个参数应该排在前面。负数或者false意味着第一个参数应该排在第二个参数前面。正数或者true则表示第二个参数应该排在前面。如果值为0,则表示两个参数值相等。 举例来说,为了对前面提到的数组根据第一个关键字进行排序,我们的自定义排序函数可以写成这样:
ISBN
出版社机械工业出版社
作者Larry Ullman
尺寸16