第Ⅰ部分 PHP的安装与运行第1章 PHP简介 3
1.1 PHP的含义 3
1.2 使用PHP的原因 4
1.3 PHP的演变过程 7
1.4 PHP 5.3新增的内容 7
1.4.1 名称空间 7
1.4.2 goto运算符 8
1.4.3 nowdoc语法 8
1.4.4 三目运算符的简洁形式 8
1.4.5 高级变化 8
1.5 小结 9
第2章 第一个PHP脚本 11
2.1 安装PHP 11
2.1.1 在Ubuntu Linux系统上安装PHP 12
2.1.2 在Windows系统中安装PHP 14
2.1.3 在Mac OS X系统中安装PHP 15
2.1.4 测试安装结果 16
2.1.5 时区设置 18
2.2 运行PHP的其他方法 20
2.2.1 在其他Web服务器上运行PHP 20
2.2.2 自己编译PHP软件 20
2.2.3 远程运行PHP 21
2.3 创建第一个脚本程序 21
2.3.1 在HTML中嵌入PHP脚本 22
2.3.2 增强脚本的功能 25
2.3.3 使用注释增加代码的可读性 26
2.4 小结 27
2.5 习题 27
第Ⅱ部分 PHP语言基础第3章 PHP语言基础 31
3.1 在PHP中使用变量 31
3.1.1 命名变量 32
3.1.2 创建变量 32
3.2 数据类型 33
3.2.1 松散类型 33
3.2.2 测试变量的类型 34
3.2.3 改变变量的数据类型 35
3.2.4 强制类型转换 36
3.3 运算符与表达式 37
3.3.1 运算符类型 37
3.3.2 运算符的优先级 43
3.4 常量 44
3.5 小结 46
3.6 习题 46
第4章 选择与循环 47
4.1 选择语句 47
4.1.1 用if编写简单的选择语句 48
4.1.2 用else语句提供备选方案 49
4.1.3 用switch语句对表达式进行多次判断 50
4.1.4 使用三目运算符的简约编码 52
4.2 用循环结构完成重复操作 54
4.2.1 用while语句实现简单的循环 54
4.2.2 do...while循环 55
4.2.3 使用for语句的简洁循环结构 56
4.2.4 用break语句退出循环 59
4.2.5 用continue语句跳过本次循环 59
4.2.6 创建嵌套循环 60
4.3 在HTML中结合选择语句和循环语句 64
4.4 小结 66
4.5 习题 66
第5章 字符串 67
5.1 创建和访问字符串 67
5.1.1 在字符串中插入比较复杂的表达式 69
5.1.2 自定义分隔符 69
5.1.3 创建字符串的其他方法 71
5.1.4 求字符串的长度 71
5.1.5 访问字符串中的单个字符 71
5.2 搜索字符串 72
5.2.1 用strstr()函数搜索字符串 72
5.2.2 用strpos()和strrpos()函数定位字符串位置 73
5.2.3 用substr_count()函数确定字符串出现的次数 74
5.2.4 用strpbrk()函数搜索字符集 74
5.3 在字符串中进行字符替换 75
5.3.1 用str_replace()函数替换全部搜索字符串 75
5.3.2 用substr_replace()替换字符串的一部分内容 76
5.3.3 用strtr()函数变换字符 80
5.4 大小写转换 81
5.5 格式化字符串 82
5.5.1 通用的格式化函数——printf()和sprintf() 82
5.5.2 删除字符串中空白符的函数:trim()、ltrim()和rtrim() 87
5.5.3 用str_pad()函数填充字符串 88
5.5.4 用wordwrap()函数实现自动换行 89
5.5.5 用number_format()函数格式化数值 91
5.6 小结 91
5.7 习题 92
第6章 数组 93
6.1 数组概述 93
6.2 创建数组 94
6.3 访问数组的元素 95
6.3.1 改变元素内容 95
6.3.2 用print_r()函数输出整个数组 97
6.3.3 用array_slice()函数读取数组中连续几个元素 98
6.3.4 统计数组中元素的个数 99
6.3.5 逐个访问数组的元素 100
6.4 用foreach()循环访问数组 104
6.4.1 用foreach循环访问数组的每个值 104
6.4.2 用foreach循环访问数组的键和值 104
6.4.3 用foreach循环修改数组值 105
6.5 多维数组 106
6.5.1 创建多维数组 107
6.5.2 访问多维数组的元素 108
6.5.3 多维数组的循环访问 109
6.6 数组的操作 110
6.6.1 数组排序 111
6.6.2 添加和删除数组元素 117
6.6.3 数组的合并 122
6.6.4 数组与字符串之间的转换 124
6.6.5 把数组转换为变量列表 125
6.7 小结 126
6.8 习题 126
第7章 函数 129
7.1 函数的定义 129
7.2 函数的作用 129
7.3 调用函数 130
7.4 变量函数 131
7.5 用户自定义函数 132
7.5.1 函数的参数 133
7.5.2 可选形参和形参的默认值 134
7.5.3 函数的返回值 135
7.5.4 变量的作用范围 137
7.5.5 创建匿名函数 141
7.6 引用 144
7.6.1 将引用传递给自定义函数 145
7.6.2 从自定义函数中返回引用 146
7.7 编写递归函数 147
7.8 小结 149
7.9 习题 150
第8章 对象 151
8.1 面向对象程序设计的概念 151
8.2 面向对象程序设计的优点 152
8.3 面向对象程序设计的基础 153
8.3.1 类 153
8.3.2 对象 153
8.3.3 属性 153
8.3.4 方法 153
8.4 在PHP中创建类和对象 154
8.5 创建和使用属性 155
8.5.1 属性的可见性 155
8.5.2 声明属性 155
8.5.3 访问属性 155
8.5.4 静态属性 157
8.5.5 类常量 158
8.6 方法 159
8.6.1 方法的可见性 159
8.6.2 方法的创建 159
8.6.3 方法的调用 159
8.6.4 方法的参数和返回值 160
8.6.5 在方法中访问对象的属性 160
8.6.6 静态方法 163
8.6.7 用类型提示检查方法的参数 165
8.6.8 用封装实现独立性 166
8.7 用_get()、_set()和_call()重载对象 167
8.7.1 用_get()和_set()方法重载属性访问 168
8.7.2 用_call()重载方法调用 171
8.7.3 其他重载方法 174
8.8 用继承扩展对象的功能 175
8.8.1 重载父类的方法 179
8.8.2 保留父类的功能 181
8.8.3 用final类和方法阻止继承和重载 181
8.8.4 抽象类和抽象方法 182
8.8.5 接口 186
8.9 构造方法和析构方法 190
8.9.1 用构造方法建立新对象 190
8.9.2 用析构方法撤销对象 191
8.10 自动加载类文件 193
8.11 将对象存储为字符串 194
8.12 判断一个对象的类 196
8.13 小结 197
8.14 习题 198
第Ⅲ部分 PHP的实际应用第9章 用PHP处理HTML表单 201
9.1 HTML表单的运行过程 201
9.2 用PHP截获表单数据 208
9.2.1 表单数据的安全性 212
9.2.2 处理空表单字段 212
9.3 多值字段的处理 213
9.4 用PHP生成Web表单 219
9.5 在表单中存储PHP变量 225
9.6 创建文件上传表单 232
9.6.1 访问上传文件的信息 232
9.6.2 限制上传文件的大小 233
9.6.3 存储和使用上传文件 234
9.7 表单提交后的重定向 238
9.8 小结 240
9.9 习题 240
第10章 用查询字符串、cookie和会话保存页面状态 241
10.1 用查询字符串保存页面状态 242
10.1.1 建立查询字符串 242
10.1.2 访问查询字符串中的数据 244
10.2 用cookie保存页面状态 247
10.2.1 cookie的组成 248
10.2.2 在PHP中设置cookie 249
10.2.3 在脚本中访问cookie 250
10.2.4 删除cookie 251
10.3 用PHP会话存储数据 255
10.3.1 创建会话 256
10.3.2 读取和写入会话数据 256
10.3.3 撤销会话 261
10.3.4 通过查询字符串传递会话ID 262
10.3.5 改变会话的行为 263
10.4 小结 267
10.5 习题 268
第11章 文件与目录 269
11.1 文件与目录基础 269
11.2 获取文件的信息 270
11.2.1 文件的时间属性 270
11.2.2 从路径获取文件名 271
11.3 打开和关闭文件 271
11.3.1 用fopen()打开文件 272
11.3.2 用fclose()关闭文件 273
11.4 文件的读写 274
11.4.1 读写字符串 274
11.4.2 文件末尾的测试 277
11.4.3 一次读取一行内容 278
11.4.4 读取CSV文件 279
11.4.5 读取和写入整个文件 280
11.4.6 随机存取文件数据 282
11.5 文件的权限 283
11.5.1 改变文件的权限 283
11.5.2 检查文件权限 285
11.6 文件的复制、重命名和删除 285
11.7 目录 286
11.7.1 其他目录函数 288
11.7.2 目录对象 290
11.7.3 区分文件与目录 291
11.8 设计一个文本编辑器 293
11.8.1 创建文本编辑器的脚本程序 294
11.8.2 测试文本编辑器 296
11.8.3 文本编辑器示例说明 297
11.9 小结 302
11.10 习题 302
第12章 数据库和SQL基础 303
12.1 决定用什么方法存储数据 303
12.1.1 数据库的结构 304
12.1.2 数据库模型 305
12.1.3 数据库系统的选择 305
12.2 关系数据库基础 306
12.2.1 规范化 307
12.2.2 用SQL操作数据库 308
12.3 设置MySQL 313
12.3.1 启动MySQL服务器 313
12.3.2 设置MySQL根用户口令 314
12.4 MySQL的简单使用 317
12.4.1 新建一个数据库 317
12.4.2 创建一个表 318
12.4.3 给表添加数据 319
12.4.4 从表中读取数据 320
12.4.5 更新表中的数据 321
12.4.6 删除表中的数据 321
12.4.7 删除表和数据库 322
12.5 在PHP脚本中连接MySQL 323
12.5.1 建立连接 323
12.5.2 错误处理 324
12.5.3 读取数据 325
12.6 小结 328
12.7 习题 328
第13章 使用PHP检索MySQL数据库中的数据 329
13.1 建立读书俱乐部数据库 329
13.1.1 BINARY属性和排序规则 331
13.1.2 唯一性约束 331
13.1.3 枚举数据类型 332
13.1.4 时间戳数据类型 332
13.2 用SELECT语句检索数据 333
13.2.1 限制返回的行数 333
13.2.2 排序结果 334
13.2.3 在查询中使用模式匹配 336
13.2.4 汇总数据 337
13.2.5 删除重复记录 338
13.2.6 对结果进行分组 339
13.2.7 从多个表中读取数据 340
13.2.8 使用别名 342
13.2.9 MySQL中其他有用的运算符和函数 343
13.3 创建一个会员记录查看器 345
13.3.1 创建config.php文件 346
13.3.2 创建common.inc.php文件 347
13.3.3 创建DataObject类文件 348
13.3.4 创建Member类 350
13.3.5 创建LogEntry类 354
13.3.6 创建view_members.php脚本 355
13.3.7 创建view_member.php脚本 358
13.3.8 测试应用程序 360
13.4 小结 361
13.5 习题 362
第14章 使用PHP操纵MySQL数据 363
14.1 插入记录 363
14.2 更新记录 365
14.3 删除记录 366
14.4 创建一个会员注册应用程序 367
14.4.1 增加一些通用代码 367
14.4.2 增加Member类的功能 369
14.4.3 创建注册脚本 371
14.4.4 测试 376
14.5 为会员建立论坛 377
14.5.1 给Member类增加验证方法 377
14.5.2 通过增加LogEntry类的功能来保存页面访问记录 378
14.5.3 添加其他的通用代码 379
14.5.4 编写登录页面脚本 380
14.5.5 创建注销函数 382
14.5.6 为会员论坛创建页面 383
14.5.7 测试会员论坛 385
14.6 创建一个会员管理应用程序 386
14.6.1 给Member类添加更新和删除方法 386
14.6.2 给LogEntry类添加一个删除方法 388
14.6.3 修改view_members.php脚本 388
14.6.4 创建view_member.php脚本 389
14.6.5 测试会员管理程序 394
14.7 小结 395
14.8 习题 396
第15章 使用PEAR简化工作 397
15.1 安装PEAR程序包 398
15.1.1 测试Ubuntu系统上的PEAR程序包管理器 398
15.1.2 用Mac OS X和MAMP测试PEAR 399
15.1.3 在Windows系统上用WampServer安装和测试PEAR 400
15.1.4 程序包的安装 402
15.1.5 附属程序包的安装 403
15.1.6 程序包的卸载 403
15.2 PEAR程序包的使用 403
15.3 用HTML_Table程序包创建HTML表格 405
15.4 用HTML_QuickForm快速建立Web表单 409
15.4.1 HTML_QuickForm的安装 409
15.4.2 HTML_QuickForm的使用 410
15.4.3 应用验证规则 414
15.5 小结 422
15.6 习题 422
第16章 PHP及其他应用程序 423
16.1 日期和时间的处理 423
16.1.1 时间戳 424
16.1.2 获取当前日期和时间 424
16.1.3 创建自己的时间戳 424
16.1.4 从时间戳中读取日期和时间值 427
16.1.5 格式化日期字符串 429
16.1.6 检查日期值 431
16.1.7 毫秒的使用 431
16.1.8 PHP未来的日期时间处理函数——DateTime 437
16.2 HTTP的使用 438
16.2.1 HTTP请求 438
16.2.2 HTTP响应 440
16.2.3 修改HTTP响应方式 441
16.3 从Web服务器获取信息 443
16.4 发送电子邮件 445
16.4.1 指定发送者的地址和添加邮件头信息 446
16.4.2 控制邮件回复地址 447
16.4.3 发送HTML邮件 448
16.5 小结 453
16.6 习题 454
第17章 用PHP语言生成图像 455
17.1 计算机图形基础 455
17.1.1 色彩原理 455
17.1.2 坐标系 456
17.1.3 图像类型 456
17.2 创建图像 457
17.2.1 新建一个图像 457
17.2.2 颜色分配 458
17.2.3 输出图像 458
17.2.4 在图像上进行绘制 460
17.3 处理图像 466
17.3.1 打开一个已有图像 467
17.3.2 插入水印 468
17.3.3 创建缩略图 472
17.4 在图像中插入文本 474
17.4.1 添加标准化文本 474
17.4.2 使用TrueType字体 476
17.5 小结 479
17.6 习题 479
第18章 使用正则表达式来匹配字符串 481
18.1 正则表达式的含义 482
18.2 PHP中的模式匹配 482
18.3 正则表达式的语法 483
18.3.1 匹配字面字符 484
18.3.2 用字符类匹配字符类型 485
18.3.3 多次匹配同一字符 486
18.3.4 贪婪匹配法和非贪婪匹配法 487
18.3.5 用子模式分组模式 487
18.3.6 引用前面的子模式匹配串 488
18.3.7 匹配多个模式 489
18.3.8 用锚点在指定的位置进行匹配 489
18.4 用preg_match_all()函数实现多次匹配 491
18.5 用preg_grep()函数搜索数组 496
18.6 文本替换 497
18.6.1 用preg_replace()替换文本 497
18.6.2 用回调函数实现文本替换 499
18.7 用模式修饰符改变匹配方式 500
18.8 用正则表达式拆分字符串 502
18.9 小结 509
18.10 习题 510
第19章 使用XML 511
19.1 XML的含义 512
19.2 XML文档的结构 513
19.2.1 XML文档的主要组成 513
19.2.2 XML语法规则 515
19.2.3 使用XML元素和属性 515
19.2.4 有效的XML文档:DTD和XSD 516
19.3 用PHP读取XML文档 519
19.3.1 XML Parser的工作过程 519
19.3.2 新建一个解析器 520
19.3.3 创建事件处理程序 520
19.3.4 解析XML文档 521
19.3.5 处理解析错误 521
19.4 用PHP语句写入和操作XML文档 526
19.4.1 DOM基础 526
19.4.2 使用DOM创建XML文档 531
19.4.3 使用DOM操作XML文档 536
19.5 用SimpleXML程序包简化XML操作 542
19.5.1 读取XML文档 543
19.5.2 创建XML文档 545
19.5.3 SimpleXML与DOM对象之间的转换 547
19.6 使用XSL和XSLT 548
19.7 小结 551
19.8 习题 551
第20章 编写高质量的代码 553
20.1 编写模块化代码 553
20.1.1 包含文件 554
20.1.2 文件只包含一次 555
20.1.3 使用包含路径 556
20.1.4 动态包含 558
20.1.5 使用名称空间避免冲突 558
20.2 一致性的编码标准 562
20.3 为代码编写文档 564
20.3.1 编写高质量的注释 564
20.3.2 使用phpDocumentor生成外部文档 565
20.4 输入检查和输出编码 572
20.4.1 输入检查 573
20.4.2 输出编码 575
20.5 错误处理 575
20.5.1 错误级别 576
20.5.2 触发错误 576
20.5.3 控制错误消息发送的目的地 578
20.5.4 记录自己的错误消息 578
20.5.5 在脚本中处理错误 579
20.5.6 控制错误输出报告 581
20.5.7 用异常对象处理错误 582
20.6 应用逻辑与表示逻辑相互独立 590
20.7 用PHPUnit使代码测试自动化 596
20.8 小结 600
20.9 习题 601
附录A 习题答案 603
附录B 配置PHP 645
附录C 可取代MySQL的数据库 683
附录D 在命令行模式中使用PHP 691