第1章 LAMP网站构建 1
1.1 介绍Web给你认识 1
1.1.1 Web应用的优势 3
1.1.2 Web开发标准 4
1.1.3 认识脚本语言 5
1.2 动态网站开发所需的Web构件 5
1.2.1 客户端浏览器 6
1.2.2 超文本标记语言(HTML) 7
1.2.3 层叠样式表(CSS) 8
1.2.4 客户端脚本编程语言JavaScript 9
1.2.5 Web服务器 10
1.2.6 服务器端编程语言 11
1.2.7 数据库管理系统 12
1.3 LAMP网站开发组合概述 13
1.3.1 Linux操作系统 13
1.3.2 Web服务器Apache 14
1.3.3 MySQL数据库管理系统 14
1.3.4 PHP后台脚本编程语言 15
第2章 从搭建你的PHP开发环境开始 18
2.1 几种常见的PHP环境安装方式 18
2.1.1 Linux系统下源代码包方式安装环境 19
2.1.2 在Windows系统上安装Web工作环境 19
2.1.3 搭建学习型的PHP工作环境 19
2.2 环境安装对操作系统的选择 20
2.2.1 选择网站运营的操作系统 20
2.2.2 选择网站开发的操作系统 20
2.3 安装集成PHP开发环境 21
2.3.1 安装前准备 21
2.3.2 安装步骤 21
2.3.3 环境测试 22
2.4 改变文档根目录www的位置 25
第3章 PHP的基本语法 26
3.1 PHP在Web开发中的应用 26
3.1.1 就从认识PHP开始吧 26
3.1.2 PHP都能做什么 27
3.2 第一个PHP脚本程序 30
3.3 PHP语言标记 33
3.3.1 将PHP代码嵌入HTML中的位置 33
3.3.2 解读开始和结束标记 34
3.4 指令分隔符“分号” 35
3.5 程序注释 36
3.6 在程序中使用空白的处理 37
3.7 变量 38
3.7.1 变量的声明 38
3.7.2 变量的命名 39
3.7.3 可变变量 41
3.7.4 变量的引用赋值 41
3.8 变量的类型 42
3.8.1 类型介绍 43
3.8.2 布尔型(boolean) 43
3.8.3 整型(integer) 44
3.8.4 浮点型(float或double) 45
3.8.5 字符串(string) 45
3.8.6 数组(array) 47
3.8.7 对象(object) 48
3.8.8 资源类型(resource) 48
3.8.9 NULL类型 49
3.8.10 伪类型介绍 50
3.9 数据类型之间相互转换 50
3.9.1 自动类型转换 50
3.9.2 强制类型转换 51
3.9.3 类型转换细节 52
3.9.4 变量类型的测试函数 52
3.10 常量 53
3.10.1 常量的定义和使用 54
3.10.2 常量和变量 54
3.10.3 系统中的预定义常量 55
3.10.4 PHP中的魔术常量 55
3.11 PHP中的运算符 56
3.11.1 算术运算符 57
3.11.2 字符串运算符 59
3.11.3 赋值运算符 60
3.11.4 比较运算符 60
3.11.5 逻辑运算符 62
3.11.6 位运算符 63
3.11.7 其他运算符 66
3.11.8 运算符的优先级 67
3.12 表达式 68
第4章 PHP的流程控制结构 69
4.1 分支结构 69
4.1.1 单一条件分支结构(if) 70
4.1.2 双向条件分支结构(else子句) 71
4.1.3 多向条件分支结构(elseif子句) 72
4.1.4 多向条件分支结构(switch语句) 73
4.1.5 巢状条件分支结构 75
4.1.6 条件分支结构实例应用(简单计算器) 76
4.2 循环结构 78
4.2.1 while语句 78
4.2.2 do...while循环 81
4.2.3 for语句 81
4.3 特殊的流程控制语句 84
4.3.1 break语句 85
4.3.2 continue语句 85
4.3.3 exit语句 86
4.4 PHP的新版特性——goto语句 87
第5章 PHP的函数应用 89
5.1 函数的定义 89
5.2 自定义函数 90
5.2.1 函数的声明 90
5.2.2 函数的调用 92
5.2.3 函数的参数 93
5.2.4 函数的返回值 94
5.3 函数的工作原理和结构化编程 96
5.4 PHP变量的范围 97
5.4.1 局部变量 97
5.4.2 全局变量 98
5.4.3 静态变量 99
5.5 声明及应用各种形式的PHP函数 100
5.5.1 常规参数的函数 101
5.5.2 伪类型参数的函数 102
5.5.3 引用参数的函数 102
5.5.4 默认参数的函数 103
5.5.5 可变个数参数的函数 105
5.5.6 回调函数 106
5.6 递归函数 110
5.7 使用自定义函数库 111
5.8 PHP匿名函数和闭包 112
第6章 PHP中的数组与数据结构 114
6.1 数组的分类 114
6.2 数组的定义 116
6.2.1 直接赋值的方式声明数组 116
6.2.2 使用array()语言结构新建数组 118
6.2.3 多维数组的声明 119
6.3 数组的遍历 121
6.4 预定义数组 124
6.4.1 服务器变量:$_SERVER 125
6.4.2 环境变量:$_ENV 126
6.4.3 URL GET变量:$_GET 126
6.4.4 HTTP POST变量:$_POST 127
6.4.5 request变量:$_REQUEST 128
6.4.6 HTTP文件上传变量:$_FILES 128
6.4.7 HTTP Cookies:$_COOKIE 128
6.4.8 Session变量:$_SESSION 128
6.4.9 Global变量:$_GLOBALS 128
6.5 数组的相关处理函数 129
6.6 操作PHP数组需要注意的一些细节 133
6.6.1 数组运算符号 133
6.6.2 删除数组中的元素操作 134
6.6.3 关于数组下标的注意事项 135
第7章 PHP面向对象的程序设计 136
7.1 面向对象的介绍 136
7.1.1 类和对象之间的关系 137
7.1.2 面向对象的程序设计 138
7.2 如何抽象一个类 138
7.2.1 类的声明 139
7.2.2 成员属性 139
7.2.3 成员方法 140
7.3 通过类实例化对象 142
7.3.1 实例化对象 142
7.3.2 对象中成员的访问 143
7.3.3 特殊的对象引用“$this” 145
7.3.4 构造方法与析构方法 147
7.4 封装性 150
7.4.1 设置私有成员 150
7.4.2 私有成员的访问 151
7.4.3 _set()和_get()两个方法 153
7.5 继承性 157
7.5.1 类继承的应用 157
7.5.2 访问类型控制 159
7.5.3 子类中重载父类的方法 161
7.6 常见的关键字和魔术方法 163
7.6.1 final关键字的应用 164
7.6.2 static关键字的使用 165
7.6.3 单态设计模式 166
7.6.4 const关键字 167
7.6.5 instanceof关键字 168
7.6.6 克隆对象 168
7.6.7 类中通用的方法_toString() 170
7.6.8 _call()方法的应用 170
7.6.9 自动加载类 172
7.6.10 对象串行化 173
7.7 抽象类与接口 175
7.7.1 抽象类 176
7.7.2 接口技术 177
7.8 多态性的应用 179
7.9 PHP 5.4 的Trait特性 181
7.9.1 Trait的声明 181
7.9.2 Trait的基本使用 182
7.10 PHP 5.3版本以后新增加的命名空间 184
7.10.1 命名空间的基本应用 184
7.10.2 命名空间的子空间和公共空间 186
7.10.3 命名空间中的名称和术语 187
7.10.4 别名和导入 188
第8章 字符串处理 190
8.1 字符串的处理介绍 190
8.1.1 字符串的处理方式 190
8.1.2 字符串类型的特点 191
8.1.3 双引号中的变量解析总结 192
8.2 常用的字符串输出函数 193
8.3 常用的字符串格式化函数 195
8.3.1 去除空格和字符串填补函数 196
8.3.2 字符串大小写的转换 197
8.3.3 和HTML标签相关的字符串格式化 198
8.3.4 其他字符串格式化函数 202
8.4 字符串比较函数 203
8.4.1 按字节顺序进行字符串比较 203
8.4.2 按自然排序进行字符串比较 204
第9章 正则表达式 206
9.1 正则表达式简介 206
9.2 正则表达式的语法规则 207
9.2.1 定界符 208
9.2.2 原子 208
9.2.3 元字符 210
9.2.4 模式修正符 213
9.3 与Perl兼容的正则表达式函数 214
9.3.1 字符串的匹配与查找 215
9.3.2 字符串的替换 218
9.3.3 字符串的分割和连接 223
第10章 PHP的错误和异常处理 226
10.1 错误处理 226
10.1.1 错误报告级别 227
10.1.2 调整错误报告级别 227
10.2 异常处理 230
10.2.1 异常处理实现 230
10.2.2 扩展PHP内置的异常处理类 231
10.2.3 捕获多个异常 232
第11章 文件系统处理 235
11.1 文件系统概述 235
11.1.1 文件类型 236
11.1.2 文件的属性 236
11.2 目录的基本操作 239
11.2.1 解析目录路径 240
11.2.2 遍历目录 241
11.2.3 统计目录大小 242
11.2.4 建立和删除目录 243
11.2.5 复制目录 244
11.3 文件的基本操作 245
11.3.1 文件的打开与关闭 245
11.3.2 写入文件 247
11.3.3 读取文件内容 248
11.3.4 访问远程文件 250
11.3.5 移动文件指针 251
11.3.6 文件的锁定机制 252
11.3.7 文件的一些基本操作函数 255
11.4 文件的上传与下载 256
11.4.1 文件上传 256
11.4.2 处理多个文件上传 260
11.4.3 文件下载 261
第12章 PHP动态图像处理 263
12.1 PHP中GD库的使用 263
12.1.1 画布管理 265
12.1.2 设置颜色 265
12.1.3 生成图像 266
12.1.4 绘制图像 267
12.1.5 在图像中绘制文字 269
12.2 设计经典的验证码类 272
12.2.1 设计验证码类 272
12.2.2 应用验证码类的实例对象 275
12.2.3 表单中应用验证码 275
12.2.4 实例演示 276
12.3 PHP图片处理 276
12.3.1 图片背景管理 276
12.3.2 图片缩放 278
12.3.3 图片裁剪 280
12.3.4 添加图片水印 281
12.3.5 图片旋转和翻转 282
第13章 数据库抽象层PDO 285
13.1 PDO所支持的数据库 285
13.2 PDO的安装 287
13.3 创建PDO对象 288
13.3.1 以多种方式调用构造方法 289
13.3.2 PDO对象中的成员方法 291
13.4 使用PDO对象 291
13.4.1 调整PDO的行为属性 292
13.4.2 PDO处理PHP程序和数据库之间的数据类型转换 292
13.4.3 PDO的错误处理模式 293
13.4.4 使用PDO执行SQL语句 294
13.5 PDO对预处理语句的支持 296
13.5.1 了解PDOStatement对象 296
13.5.2 准备语句 297
13.5.3 绑定参数 298
13.5.4 执行准备好的查询 299
13.5.5 获取数据 300
第14章 会话控制 305
14.1 为什么要使用会话控制 305
14.2 会话跟踪的方式 306
14.3 Cookie的应用 307
14.3.1 Cookie概述 307
14.3.2 向客户端计算机中设置Cookie 308
14.3.3 在PHP脚本中读取Cookie的资料内容 309
14.3.4 数组形态的Cookie应用 310
14.3.5 删除Cookie 310
14.3.6 基于Cookie的用户登录模块 311
14.4 Session的应用 313
14.4.1 Session概述 313
14.4.2 配置Session 314
14.4.3 Session的声明与使用 315
14.4.4 注册一个会话变量和读取Session 315
14.4.5 注销变量与销毁Session 316
14.4.6 Session的自动回收机制 318
14.4.7 传递Session ID 318
14.5 一个简单的邮件系统实例 321
14.5.1 为邮件系统准备数据 321
14.5.2 编码实现邮件系统 323
14.5.3 邮件系统执行说明 325
第15章 PHP的模板引擎Smarty 327
15.1 什么是模板引擎 327
15.2 选择Smarty模板引擎 329
15.3 安装Smarty及初始化配置 330
15.3.1 安装Smarty 330
15.3.2 初始化Smarty类库的默认设置 331
15.3.3 第一个Smarty的简单示例 334
15.4 Smarty的基本应用 337
15.4.1 PHP程序员常用的和Smarty相关的操作 337
15.4.2 模板设计时美工的常用操作 339
15.5 Smarty模板设计的基本语法 339
15.5.1 模板中的注释 340
15.5.2 模板中的变量应用 340
15.5.3 模板中的函数应用 342
15.5.4 忽略Smarty解析 345
15.5.5 在模板中使用保留变量 345
15.6 Smarty模板中的变量调解器 347
15.6.1 变量调解器函数的使用方式 348
15.6.2 Smarty默认提供的变量调解器 348
15.7 Smarty模板中的内置函数 350
15.7.1 流程控制 350
15.7.2 数组遍历 353
第16章 MVC模式与PHP框架 356
16.1 MVC模式在Web中的应用 356
16.1.1 MVC模式的工作原理 356
16.1.2 MVC模式的优缺点 358
16.2 PHP开发框架 359
16.2.1 什么是框架 359
16.2.2 为什么要用框架 360
16.2.3 框架和MVC设计模式的关系 360
16.2.4 比较流行的PHP框架 361
16.3 划分模块和操作 362
16.3.1 为项目划分模块 363
16.3.2 为模块设置操作 363
16.4 小结 364
第17章 超轻量级PHP框架BroPHP 2.0 365
17.1 BroPHP框架概述 365
17.1.1 系统特点 366
17.1.2 环境要求 366
17.1.3 BroPHP框架源码的目录结构 367
17.2 单一入口 367
17.3 部署项目应用目录 369
17.3.1 项目推荐的部署方式 370
17.3.2 URL访问 371
17.4 BroPHP框架的基本设置 373
17.4.1 默认开启 373
17.4.2 配置文件 373
17.4.3 内置函数 375
17.5 声明控制器(Control) 376
17.5.1 控制器的声明(模块) 376
17.5.2 操作的声明 377
17.5.3 页面跳转 378
17.5.4 重定向 380
17.6 设计视图(View) 381
17.6.1 视图与控制器之间的交互 381
17.6.2 切换模板风格 381
17.6.3 模板文件的声明规则 382
17.6.4 display()的新用法 382
17.6.5 模板中的几个常用变量应用 383
17.6.6 在PHP程序中定义资源位置 384
17.7 应用模型(Model) 384
17.7.1 BroPHP数据库操作接口的特性 384
17.7.2 切换数据库驱动 385
17.7.3 声明和实例化Model 386
17.7.4 数据库的统一操作接口 389
17.8 自动验证 407
17.9 缓存设置 410
17.9.1 基于memcached缓存设置 410
17.9.2 基于Smarty的缓存机制 410
17.10 调试模式 411
17.11 内置扩展类库 412
17.11.1 分页类Page 412
17.11.2 验证码类Vcode 414
17.11.3 图像处理类Image 415
17.11.4 文件上传类FileUpload 416
17.11.5 BroPHP 2.0新增加的文件缓存类FileCache 418
17.11.6 BroPHP 2.0新增加的无限分类处理类CatTree 420
17.12 自定义功能扩展 423
17.12.1 自定义扩展类库 423
17.12.2 自定义扩展函数库 423
17.13 BroPHP 2.0数据库分离部署方案 424
17.13.1 数据分离方法 424
17.13.2 数据库连接配置 424
17.13.3 数据模型配置 425
17.14 BroPHP 2.0资源分布式部署 426
17.14.1 网站资源分布式部署方法 426
17.14.2 部署上传的文件资源 427
17.14.3 部署缩略图的资源位置 428
17.14.4 将公共资源和单个应用中的资源分离部署 428
17.14.5 将临时和缓存文件分离部署 428
17.15 BroPHP2.0主程序与Web目录分离 429
附录A PHP 5.3~5.6新特性 430
A.1 PHP 5.3中的新特性 430
A.2 PHP 5.4中的新特性 431
A.2.1 PHP 5.4中其他值得注意的改变 431
A.2.2 PHP 5.4中其他改动和特性 432
A.3 PHP 5.5中的新特性 432
A.4 PHP 5.6中的新特性 433