PHP MVC 开发实战
作者:李开涌编著
出版时间:2013
内容简介
MVC是一种先进的开发模式,能够解决团队开发之间协同配合的问题,使得网站各部件以更高的效率运行。MVC模式将网站分为3大部件,分别为模型、视图、控制器。这3大部件各自分离,但又相互依存,最终形成了一个容易维护、容易扩展、高效运行的网站平台。对于后台程序员,借助于MVC模式就可以更加专注于功能的实现,而不需要太多地涉及页面与前端。这种分工协作的最终目的是提高开发效率及项目质量。对于个人项目,也许在其他编程技术(例如Java、Python)中,MVC模式并没有优势,但在PHP中,由于支持混合编程,所以使用MVC模式进行编程,能显著提高工作效率。《PHP MVC 开发实战》是国内第一本专门介绍PHP MVC开发模式的图书,全书围绕MVC实现思路进行细致的讲解。通过MVC编程模式,以点带面,全面深入探讨PHP核心技术。同时,《PHP MVC 开发实战》也是一本深入介绍利用PHP构建高性能网站的图书,通过MVC的数据库中间件,可以轻松实现网站群体、读写分离等高级应用,本书在此基础上还会进一步介绍当前流行的NoSQL应用、全文搜索应用等。最后,作者通过一个自行编写的MVC框架,引导读者开发属于自己的PHP MVC框架。《PHP MVC 开发实战》内容通俗易懂、示例形象,适合广大的Web从业人员阅读。由于PHP非常简单、易用,所以就算是未接触过PHP的读者或者初学者,只要掌握了基础的面向对象编程思想就可以轻松上手。
目录
目 录
前言
基 础 篇
第1章 开发前准备2
1.1 PHP与MVC概述3
1.2 开发环境搭建7
1.2.1 在Windows下使用一键安装包8
1.2.2 在Linux平台安装LNMP11
1.3 开发工具介绍20
1.3.1 PHP Coder20
1.3.2 PHP Editor21
1.3.3 NetBeans IDE21
1.3.4 Eclipse PDT22
1.3.5 Zend Studio24
1.3.6 Adobe Dreamweaver25
1.3.7 VS.PHP27
1.4 SVN版本控制28
1.4.1 SVN介绍28
1.4.2 SVN的安装29
1.4.3 TortoiseSVN的简单使用32
1.4.4 TortoiseSVN文件管理35
1.4.5 SVN版本库权限配置38
1.5 小结40
第2章 面向对象基础41
2.1 面向对象介绍42
2.2 PHP面向对象基础43
2.2.1 class关键字43
2.2.2 类中的成员44
2.2.3 实例化类46
2.3 类中的方法47
2.3.1 方法的参数47
2.3.2 方法的返回值48
2.3.3 访问修饰符49
2.3.4 $this关键字50
2.4 类的继承50
2.4.1 子类继承父类51
2.4.2 重写父类中的成员属性52
2.4.3 final关键字53
2.5 静态类成员54
2.5.1 static关键字54
2.5.2 访问静态类成员(self::parent::)55
2.5.3 类常量57
2.6 小结58
第3章 类的高级特性59
3.1 类对象的克隆(clone)60
3.2 类接口(interface)60
3.2.1 接口的意义60
3.2.2 定义接口61
3.2.3 实现接口(implements)62
3.3 抽象类与抽象方法64
3.3.1 理解抽象概念65
3.3.2 定义抽象类和方法(abstract)65
3.3.3 使用抽象类66
3.3.4 接口与抽象类的区别67
3.4 类的异常68
3.4.1 Exception类68
3.4.2 使用try、catch、throw语句69
3.5 小结70
实 战 篇
第4章 PHP MVC发展状况72
4.1 出身豪门的Zend Framework73
4.1.1 Zend Framework简介73
4.1.2 安装Zend Framework73
4.1.3 使用Zend Framework实现MVC75
4.1.4 Zend Framework核心组件76
4.2 功能强大的Symfony80
4.2.1 Symfony简介80
4.2.2 获得Symfony81
4.2.3 实现一个简单的MVC82
4.2.4 Symfony的配置文件85
4.3 灵活完善的CakePHP85
4.3.1 CakePHP简介85
4.3.2 下载安装CakePHP86
4.3.3 使用CakePHP构建MVC编程86
4.3.4 好用的CakePHP视图助手89
4.4 使用广泛的CodeIgniter89
4.4.1 CodeIgniter简介89
4.4.2 安装CodeIgniter90
4.4.3 使用CodeIgniter实现MVC91
4.5 高效便捷的ThinkPHP94
4.5.1 ThinkPHP介绍94
4.5.2 下载安装ThinkPHP95
4.5.3 使用ThinkPHP实现MVC96
4.5.4 高效的ThinkPHP视图引擎98
4.6 小结100
第5章 ThinkPHP开发入门101
5.1 大道至简、开发由我102
5.1.1 入口文件102
5.1.2 两种创建项目的方式103
5.1.3 模块分组104
5.2 ThinkPHP目录106
5.2.1 系统目录106
5.2.2 项目目录110
5.3 配置文件111
5.3.1 选项配置111
5.3.2 静态缓存配置113
5.3.3 路由配置115
5.4 小结115
第6章 ThinkPHP开发MVC应用116
6.1 ThinkPHP中的URL117
6.1.1 URL模式117
6.1.2 URL路由119
6.1.3 自动生成匹配的URL121
6.1.4 实现文件伪静态122
6.2 模型(Model)123
6.2.1 创建模型123
6.2.2 实例化模型124
6.2.3 模型初始化(_initialize())125
6.3 控制器(Controller)126
6.3.1 创建控制器126
6.3.2 控制器中的动作(Action)126
6.3.3 控制器的调用128
6.3.4 项目空控制器与控制器空动作129
6.3.5 动作的前后操作131
6.4 视图(View)132
6.4.1 创建和使用视图132
6.4.2 系统变量与常量133
6.4.3 在视图中使用函数134
6.4.4 数据循环135
6.4.5 条件判断138
6.4.6 使用外部文件141
6.4.7 导入标签库142
6.4.8 使用布局145
6.5 小结147
第7章 ThinkPHP的数据库操作148
7.1 定义数据表模型149
7.1.1 模型映射149
7.1.2 自定义模型149
7.1.3 create方法151
7.1.4 模型属性154
7.2 基础模型(Model)158
7.2.1 连贯操作159
7.2.2 CURD159
7.2.3 查询语言163
7.2.4 使用原生的SQL语言166
7.3 关联模型(RelationModel)167
7.3.1 关联关系167
7.3.2 关联定义168
7.3.3 关联模型的CURD169
7.4 高级模型(AdvModel)174
7.4.1 定位查询174
7.4.2 动态查询175
7.4.3 内容存文本176
7.5 大数据支持176
7.5.1 分布式数据库177
7.5.2 读写分离179
7.5.3 数据表分区183
7.6 小结187
第8章 安全与调试188
8.1 构建稳健及安全的MVC189
8.2 ThinkPHP内置的安全机制189
8.2.1 表单令牌189
8.2.2 字段检测190
8.2.3 数据验证193
8.2.4 数据验证码197
8.3 ThinkPHP安全日志机制201
8.3.1 记录方式201
8.3.2 系统日志202
8.3.3 应用日志202
8.4 使用消息队列机制204
8.4.1 HTTPSQS基础204
8.4.2 安装HTTPSQS205
8.4.3 测试HTTPSQS207
8.4.4 在MVC中使用HTTPSQS209
8.5 ThinkPHP程序调试机制212
8.5.1 开启调试功能212
8.5.2 代码编译概念214
8.5.3 异常定制215
8.5.4 性能调试216
8.6 小结218
第9章 ThinkPHP功能库220
9.1 数据处理221
9.1.1 XML引擎221
9.1.2 返回XML228
9.1.3 返回Json232
9.1.4 使用Json及Jsonp235
9.2 ThinkPHP函数库241
9.2.1 快捷方法241
9.2.2 基础函数库242
9.2.3 扩展函数库245
9.3 ThinkPHP多语言支持248
9.3.1 部署多语言248
9.3.2 实现多语言249
9.3.3 多语言与客户端250
9.4 客户端252
9.4.1 封装的Session252
9.4.2 封装的Cookie256
9.5 小结257
第10章 网站静态化259
10.1 Cache类260
10.1.1 缓存的方式260
10.1.2 开启缓存260
10.1.3 安装Memcached261
10.1.4 使用Memcached265
10.2 Memcached实战应用267
10.2.1 页面局部缓存267
10.2.2 缓存数据集267
10.2.3 使用Memcache存放Session270
10.3 使用Redis缓存274
10.3.1 Redis的安装274
10.3.2 安装Redis扩展277
10.3.3 测试Redis279
10.3.4 Redis缓存279
10.4 静态缓存282
10.4.1 静态缓存配置282
10.4.2 静态缓存规则283
10.5 小结286
第11章 ThinkPHP扩展287
11.1 使用扩展288
11.1.1 扩展的分类288
11.1.2 模板引擎扩展291
11.2 网络操作293
11.2.1 文件上传293
11.2.2 Nginx文件上传进度295
11.2.3 FTP文件上传304
11.2.4 下载文件305
11.2.5 Socket套接字编程306
11.2.6 定位当前位置308
11.2.7 发送电子邮件309
11.3 数据处理311
11.3.1 数据加密311
11.3.2 数据编码转换313
11.3.3 数据分页314
11.3.4 日期数据315
11.3.5 Input类317
11.3.6 GD库绘制图形318
11.4 行为扩展320
11.4.1 行为概述320
11.4.2 内置行为扩展322
11.4.3 自定义行为扩展323
11.5 小结325
第12章 SOAP分布式开发326
12.1 分布式开发概念327
12.1.1 SOA与SOAP327
12.1.2 PHP 5分布式开发329
12.2 SOAP消息体331
12.2.1 WSDL文件331
12.2.2 定义根消息体definitions335
12.2.3 type类型335
12.2.4 portType端口类型336
12.2.5 message消息列表337
12.2.6 binding服务绑定描述337
12.2.7 service服务描述338
12.2.8 可视化创建WSDL338
12.2.9 使用nusoap创建WSDL341
12.2.10 ThinkPHP生成SOAP服务343
12.3 使用soapUI测试WSDL347
12.3.1 soapUI简介347
12.3.2 安装soapUI348
12.3.3 创建项目349
12.3.4 测试项目350
12.3.5 负载测试351
12.4 小结353
第13章 整合Smarty模板引擎354
13.1 Smarty模板引擎介绍355
13.2 使用Smarty356
13.2.1 在PHP中使用Smarty356
13.2.2 开启ThinkPHP模板扩展358
13.2.3 以扩展的方式使用全功能Smarty358
13.3 Smarty模板函数和标签360
13.3.1 include(包含文件)361
13.3.2 capture(暂存数据)361
13.3.3 include_php(包含PHP文件)362
13.3.4 insert(插入函数)362
13.3.5 literal(原文本输出)363
13.3.6 php(执行PHP语句块)363
13.3.7 strip(保留空格和回车符)364
13.4 Smarty模板控制语句364
13.4.1 if、elseif(判断语句)364
13.4.2 foreach(循环数据)365
13.4.3 section(遍历数组)366
13.5 变量调节器367
13.5.1 capitalize(首字母大写)367
13.5.2 count_characters(统计字符)367
13.5.3 count_paragraphs(统计段落)367
13.5.4 count_sentences(统计句数)368
13.5.5 count_words(统计单词)368
13.5.6 date_format(格式化日期)368
13.5.7 escape(字符转码)369
13.5.8 replace(字符替换)369
13.5.9 regex_replace(正则替换)370
13.5.10 truncate(字符截取)370
13.6 视图助手370
13.6.1 html_image(生成图像)370
13.6.2 html_options(生成表单选择组件)371
13.6.3 html_radios(生成表单单选组件)372
13.6.4 html_checkboxes(生成表单复选组件)373
13.6.5 html_select_date(生成表单日期选择组件)374
13.6.6 html_select_time(生成表单时间选择组件)376
13.6.7 html_table(生成表格)377
13.7 Smarty对象方法378
13.7.1 display(显示模板)378
13.7.2 fetch(获取输出内容)379
13.7.3 configLoad(加载配置信息)379
13.7.4 registerPlugin(注册插件)380
13.8 Smarty缓存383
13.8.1 开启缓存383
13.8.2 局部缓存384
13.9 小结386
第14章 整合Coreseek全文搜索服务387
14.1 全文索引概述388
14.2 Coreseek基础389
14.2.1 Coreseek概述389
14.2.2 在Windows下安装Coreseek390
14.2.3 在Linux下安装Coreseek394
14.3 Coreseek管理工具397
14.3.1 indexer397
14.3.2 searchd400
14.3.3 search402
14.4 创建索引403
14.4.1 索引源分类403
14.4.2 增量索引407
14.4.3 实时索引409
14.5 在MVC中搜索数据412
14.5.1 安装Sphinx扩展模块412
14.5.2 使用PHP接口413
14.5.3 在MVC中搜索数据414
14.5.4 实现关键词高亮显示418
14.6 小结420
第15章 使用MongoDB421
15.1 MongoDB介绍422
15.2 MongoDB的安装424
15.2.1 在Windows下安装MongoDB424
15.2.2 在Linux下安装MongoDB426
15.3 MongoDB的使用428
15.3.1 理解MongoDB的数据结构428
15.3.2 数据库管理429
15.3.3 文档数据类型430
15.3.4 插入数据432
15.3.5 查询数据433
15.3.6 更新数据436
15.3.7 删除数据436
15.4 条件操作437
15.4.1 条件判断语句437
15.4.2 $all匹配全部438
15.4.3 $exists 检查字段438
15.4.4 null 空值处理439
15.4.5 $ne比较439
15.4.6 $mod 取模运算440
15.4.7 $in、nin枚举查询440
15.4.8 $or、$nor判断查询441
15.4.9 $type映射查询442
15.4.10 使用正则表达式匹配442
15.4.11 limit、skip 限制查询443
15.4.12 count 查询记录条数444
15.4.13 sort 查询结果排序444
15.5 性能优化445
15.5.1 使用索引445
15.5.2 固定集合448
15.5.3 GridFS450
15.5.4 Profile优化器450
15.6 在MVC中使用MongoDB451
15.6.1 安装PHP扩展451
15.6.2 开启MongoDB用户验证453
15.6.3 ThinkPHP操作MongoDB455
15.7 小结459
第16章 Redis实战460
16.1 Redis的使用461
16.1.1 Redis概述461
16.1.2 常用管理命令462
16.1.3 Redis用户验证464
16.2 Redis数据类型465
16.2.1 String类型465
16.2.2 Hash类型467
16.2.3 List类型469
16.2.4 Sets类型473
16.2.5 Zset类型477
16.2.6 使用phpRedisAdmin480
16.3 Redis高级使用483
16.3.1 数据持久化483
16.3.2 虚拟内存484
16.3.3 事务处理484
16.3.4 主从同步486
16.4 在MVC中使用Redis487
16.4.1 在PHP中使用Redis487
16.4.2 在MVC中进行CURD操作491
16.4.3 数据分页496
16.5 小结498
项 目 篇
第17章 开发论坛系统500
17.1 开发前准备501
17.1.1 系统介绍501
17.1.2 系统预览501
17.1.3 架构设计505
17.1.4 系统部署511
17.2 系统整体界面设计513
17.2.1 布局方案514
17.2.2 论坛首页516
17.2.3 论坛版块519
17.3 用户模块524
17.3.1 用户登录524
17.3.2 用户注册528
17.3.3 使用微博账号登录532
17.3.4 将现有账号绑定到微博535
17.4 发表帖子模块537
17.4.1 整合百度编辑器537
17.4.2 上传图片540
17.4.3 管理图片542
17.4.4 上传附件543
17.4.5 数据提交处理544
17.5 帖子内容模块545
17.5.1 帖子正文545
17.5.2 回复列表547
17.5.3 回复帖子550
17.6 帖子管理模块551
17.6.1 删除帖子551
17.6.2 锁定帖子553
17.6.3 置顶帖子554
17.6.4 推荐帖子554
17.7 行为拦截器555
17.7.1 统计浏览量555
17.7.2 登记浏览位置556
17.8 帖子搜索模块557
17.8.1 标题搜索557
17.8.2 使用全文搜索558
17.9 小结562
第18章 开发自己的MVC框架563
18.1 开发前准备564
18.1.1 开发MVC框架的思路564
18.1.2 文件结构564
18.2 核心类库565
18.2.1 初始化565
18.2.2 URL处理566
18.3 控制器的开发567
18.3.1 类自动载入568
18.3.2 加载模板引擎(View)569
18.3.3 处理消息(message)569
18.4 模型的开发572
18.4.1 使用PDO572
18.4.2 模型实例化573
18.4.3 实现连贯操作573
18.4.4 读取数据574
18.4.5 插入数据576
18.4.6 更新数据577
18.4.7 删除数据578
18.5 扩展类库582
18.5.1 Session驱动扩展583
18.5.2 缓存驱动扩展586
18.6 测试MVC框架588
18.6.1 创建项目589
18.6.2 测试CURD590
18.6.3 测试驱动594
18.7 小结595
附录596
附录A 让Nginx支持Pathinfo模式596
附录B 配置团队开发环境597