该资源由用户: 白云洪飞 上传 举报不良内容
本书是PHP经典图书升级版,它既是一本关于面向对象设计与编程的书,也是一本关于如何使用工具管理PHP代码(从协作到部署)的书。书中讲解了PHP的新特性,例如匿名类以及标量参数提示和返回值类型。第5版重写了Composer和Packagist库的相关内容,并增加了关于Git版本控制的篇幅。示例代码全面更新,符合PSR-1和PSR-2标准。阅读本书能够帮你构建实现既定目标且易于协同开发的系统,并让你的代码优雅、简洁且易于理解。目录 · · · · · ·第一部分 对象第1章 PHP:设计和管理 21.1 问题 21.2 PHP与其他语言 31.3 关于本书 51.3.1 对象 51.3.2 模式 61.3.3 实践 61.3.4 第5版新增内容 71.4 小结 8第2章 PHP和对象 92.1 PHP对象的偶然成功 92.1.1 起源:PHP/FI 92.1.2 语法糖:PHP 3 92.1.3 一场静悄悄的革命:PHP 4 102.1.4 拥抱变化:PHP 5 112.1.5 迎头追赶:PHP 7 122.2 拥护和顾虑:关于对象的争辩 122.3 小结 13第3章 对象基础 143.1 类和对象 143.1.1 第一个类 143.1.2 一个(或两个)对象 153.2 设置类中的属性 163.3 使用方法 183.4 参数和类型 213.4.1 基本类型 213.4.2 接受提示:对象类型 243.5 继承 283.5.1 继承问题 283.5.2 使用继承 333.5.3 public、private和protected:管理类的访问 383.6 小结 43第4章 高级特性 444.1 静态方法和属性 444.2 常量属性 474.3 抽象类 484.4 接口 504.5 trait 524.5.1 trait可以解决的问题 524.5.2 定义和使用trait 534.5.3 使用多个trait 544.5.4 组合使用trait与接口 554.5.5 通过insteadof管理方法名冲突 564.5.6 使用别名重写trait的方法 574.5.7 在trait中使用静态方法 584.5.8 访问宿主类的属性 594.5.9 在trait中定义抽象方法 594.5.10 改变trait中方法的访问权限 604.6 延迟静态绑定:static关键字 614.7 错误处理 654.8 final类和方法 734.9 内部错误类 744.10 使用拦截器 754.11 定义析构方法 814.12 使用__clone()复制对象 824.13 定义对象的字符串值 854.14 回调、匿名函数和闭包 864.15 匿名类 904.16 小结 92第5章 对象工具 935.1 PHP和包 935.1.1 PHP包和命名空间 935.1.2 自动加载 1015.2 类函数和对象函数 1055.2.1 查找类 1065.2.2 检查对象或类 1065.2.3 得到指向类的完全限定的字符串引用 1075.2.4 检查方法 1085.2.5 检查类属性 1105.2.6 检查继承 1105.2.7 方法调用 1115.3 反射API 1125.3.1 入门 1125.3.2 是时候大干一场了 1135.3.3 检查类 1155.3.4 检查方法 1175.3.5 检查方法参数 1185.3.6 使用反射API 1205.4 小结 123第6章 对象与设计 1246.1 定义代码设计 1246.2 面向对象编程与面向过程编程 1256.2.1 职责 1296.2.2 内聚 1296.2.3 耦合 1296.2.4 正交 1296.3 选择类 1306.4 多态 1316.5 封装 1326.6 忘记细节 1336.7 四个方向标 1336.7.1 代码重复 1346.7.2 类知道太多 1346.7.3 万能的类 1346.7.4 条件语句 1346.8 UML 1346.8.1 类图 1356.8.2 序列图 1406.9 小结 142第二部分 模式第7章 什么是设计模式,为什么要使用设计模式 1447.1 什么是设计模式 1447.2 设计模式概要 1467.2.1 名称 1467.2.2 问题 1467.2.3 解决方案 1477.2.4 效果 1477.3 《设计模式》的格式 1477.4 为什么使用设计模式 1487.4.1 设计模式定义了问题 1487.4.2 设计模式定义了解决方案 1487.4.3 设计模式与编程语言无关 1487.4.4 模式定义了一组词汇 1487.4.5 模式是经过测试的 1497.4.6 模式为协作而设计 1497.4.7 设计模式促进优秀设计 1497.4.8 流行的框架都使用了设计模式 1507.5 PHP与设计模式 1507.6 小结 150第8章 一些模式原则 1518.1 模式的启示 1518.2 组合与继承 1528.2.1 问题 1528.2.2 使用组合 1558.3 解耦 1578.3.1 问题 1578.3.2 解耦 1598.4 针对接口编程,而不是针对实现编程 1618.5 概念在变化 1628.6 不要盲从模式 1628.7 模式 1638.7.1 用于生成对象的模式 1638.7.2 用于组织对象和类的模式 1638.7.3 面向任务的模式 1638.7.4 企业设计模式 1638.7.5 数据库模式 1638.8 小结 163第9章 生成对象 1649.1 生成对象的问题和解决方案 1649.2 单例模式 1689.2.1 问题 1699.2.2 实现 1699.2.3 效果 1719.3 工厂方法模式 1729.3.1 问题 1729.3.2 实现 1759.3.3 效果 1779.4 抽象工厂模式 1779.4.1 问题 1779.4.2 实现 1789.4.3 效果 1809.5 原型模式 1819.5.1 问题 1829.5.2 实现 1839.6 推向边缘:服务定位器 1869.7 完全隔离:依赖注入 1879.7.1 问题 1879.7.2 实现 1889.7.3 效果 1919.8 小结 191第10章 使面向对象编程更加灵活的模式 19210.1 构造可灵活创建对象的类 19210.2 组合模式 19210.2.1 问题 19310.2.2 实现 19510.2.3 效果 19910.2.4 组合模式小结 20210.3 装饰器模式 20210.3.1 问题 20210.3.2 实现 20510.3.3 效果 20910.4 外观模式 20910.4.1 问题 20910.4.2 实现 21110.4.3 效果 21110.5 小结 212第11章 执行及描述任务 21311.1 解释器模式 21311.1.1 问题 21311.1.2 实现 21411.1.3 解释器模式的问题 22211.2 策略模式 22211.2.1 问题 22211.2.2 实现 22311.3 观察者模式 22711.4 访问者模式 23511.4.1 问题 23511.4.2 实现 23611.4.3 访问者模式的问题 24111.5 命令模式 24211.5.1 问题 24211.5.2 实现 24211.6 空对象模式 24711.6.1 问题 24711.6.2 实现 24911.7 小结 251第12章 企业设计模式 25212.1 架构概述 25212.1.1 模式 25212.1.2 应用与分层 25312.2 企业架构外的基础模式 25512.2.1 注册表 25512.2.2 实现 25612.2.3 效果 26012.3 表示层 26012.3.1 前端控制器 26112.3.2 应用控制器 27112.3.3 页面控制器 28312.3.4 模板视图和视图助手 28812.4 业务逻辑层 29112.4.1 事务脚本 29112.4.2 领域模型 29512.5 小结 298第13章 数据库设计模式 29913.1 数据层 29913.2 数据映射器 29913.2.1 问题 30013.2.2 实现 30013.2.3 效果 31313.3 标识映射 31513.3.1 问题 31513.3.2 实现 31513.3.3 效果 31813.4 工作单元 31913.4.1 问题 31913.4.2 实现 31913.4.3 效果 32313.5 延迟加载 32313.5.1 问题 32313.5.2 实现 32413.5.3 效果 32613.6 领域对象工厂 32613.6.1 问题 32613.6.2 实现 32613.6.3 效果 32713.7 标识对象 32913.7.1 问题 32913.7.2 实现 33013.7.3 效果 33513.8 选择工厂与更新工厂模式 33513.8.1 问题 33613.8.2 实现 33613.8.3 效果 34013.9 现在映射器中还剩下什么 34013.10 小结 342第三部分 实践第14章 优秀(以及糟糕)的实践 34614.1 超越代码 34614.2 借轮子 34714.3 合作愉快 34814.4 为代码插上翅膀 34914.5 标准 35014.6 Vagrant 35014.7 测试 35114.8 持续集成 35114.9 小结 352第15章 PHP标准 35315.1 为什么需要标准 35315.2 什么是PSR 35415.2.1 为什么选择PSR 35415.2.2 哪些人需要PSR 35515.3 编码风格 35515.3.1 PSR-1基础编码规范 35615.3.2 PSR-2编码风格规范 35815.3.3 检查和修改代码 36015.4 PSR-4自动加载规范 36215.5 小结 365第16章 通过Composer使用和创建组件 36616.1 什么是Composer 36616.2 安装Composer 36716.3 安装一个(组)包 36716.3.1 通过命令行安装包 36816.3.2 版本 36816.3.3 require-dev元素 36916.4 Composer与自动加载 37016.5 创建自己的包 37116.5.1 添加包信息 37116.5.2 平台软件包 37216.6 通过Packagist分发包 37316.7 私有包 37616.8 小结 377第17章 用Git进行版本控制 37817.1 为什么进行版本控制 37817.2 安装Git 37917.3 使用在线Git代码库 38017.4 配置Git服务器 38217.5 启动项目 38417.6 更新与提交 38717.7 文件和目录的添加与移除 39017.7.1 添加文件 39017.7.2 删除文件 39017.7.3 添加目录 39117.7.4 删除目录 39117.8 标记一次发布 39217.9 创建分支 39317.10 小结 398第18章 使用PHPUnit进行测试 39918.1 功能测试与单元测试 39918.2 手动测试 40018.3 引入PHPUnit 40218.3.1 创建测试用例 40218.3.2 断言方法 40518.3.3 测试异常 40618.3.4 运行测试套件 40718.3.5 约束 40718.3.6 mock和stub 40918.3.7 失败是成功之母 41218.4 编写Web测试 41518.4.1 为测试重构Web应用 41518.4.2 简单的Web测试 41718.4.3 引入Selenium 41918.5 警告 42418.6 小结 426第19章 使用Phing进行自动化构建 42719.1 Phing是什么 42719.2 获取和安装Phing 42819.3 编写构建文档 42819.3.1 目标 43019.3.2 属性 43219.3.3 类型 43819.3.4 任务 44319.4 小结 446第20章 Vagrant 44720.1 问题 44720.2 设置 44820.3 挂载本地目录到Vagrant镜像 45020.4 配置 45120.4.1 设置Web服务器 45220.4.2 设置MySQL 45220.4.3 配置主机名 45320.5 结束语 45520.6 小结 455第21章 持续集成 45621.1 什么是持续集成 45621.1.1 准备一个持续集成项目 45821.1.2 安装Jenkins插件 46721.1.3 设置Git公钥 46821.1.4 创建新项目 46921.1.5 运行第一次构建 47221.1.6 配置报告 47221.1.7 触发构建 47421.2 小结 476第22章 对象、模式和实践 47722.1 对象 47722.1.1 选择 47822.1.2 封装与委托 47822.1.3 解耦 47822.1.4 可复用性 47922.1.5 美学 47922.2 模式 47922.2.1 模式给我们带来了什么 48022.2.2 模式与设计原则 48022.3 实践 48222.3.1 测试 48222.3.2 标准 48322.3.3 版本控制 48322.3.4 自动构建 48322.3.5 持续集成 48422.3.6 我们遗漏了什么 48422.4 小结 485附录A 参考文献 486附录B 一个简单的解析器 488
尊敬的读者:
欢迎您访问我们的网站。本站的初衷是为大家提供一个共享学习资料、交换知识的平台。每位用户都可以将文件上传至网盘并分享。
然而,随着用户上传的资料增多,我们发现部分不宜或版权问题的书籍被分享到了本站。
为此,我们已经关闭了分享入口,并进行了多次书籍审查,但仍有部分内容未能彻底审查到位。
在此,我们恳请广大读者与我们共同监督,如发现任何不宜内容,请 点击此处 进行举报,我们会第一时间处理并下架相关内容。
希望我们能共建一个文明社区!感谢您的理解与支持!