第1章 PHP基础架构 1
1.1 简介 1
1.2 安装及调试 2
1.3 PHP7的变化 3
1.4 PHP的构成 6
1.5 生命周期 7
1.6 小结 13
第2章 SAPI 14
2.1 Cli 14
2.1.1 执行流程 15
2.1.2 内置Web服务器 19
2.2 Fpm 19
2.2.1 基本实现 20
2.2.2 Fpm的初始化 22
2.2.3 worker——请求处理 26
2.2.4 master——进程管理 29
2.3 Embed 36
2.3.1 实现 37
2.3.2 使用 38
2.4 小结 40
第3章 数据类型 41
3.1 变量 41
3.1.1 变量类型 42
3.1.2 内部实现 43
3.2 字符串 45
3.3 数组 46
3.3.1 基本实现 48
3.3.2 散列函数 50
3.3.3 数组的初始化 50
3.3.4 插入 51
3.3.5 哈希冲突 52
3.3.6 查找 54
3.3.7 扩容 55
3.4 引用 57
3.5 类型转换 58
3.5.1 转换为NULL 59
3.5.2 转换为布尔型 59
3.5.3 转换为整型 61
3.5.4 转换为浮点型 63
3.5.5 转换为字符串 63
3.5.6 转换为数组 65
3.5.7 转换为对象 67
3.6 小结 68
第4章 内存管理 69
4.1 变量的自动GC机制 69
4.1.1 引用计数 70
4.1.2 写时复制 73
4.1.3 回收时机 74
4.2 垃圾回收 74
4.2.1 回收算法 76
4.2.2 具体实现 77
4.3 内存池 83
4.3.1 内存池的初始化 87
4.3.2 内存分配 89
4.3.3 系统内存分配 99
4.3.4 内存释放 100
4.4 线程安全 103
4.4.1 TSRM的基本实现 104
4.4.2 线程私有数据 112
4.4.3 线程局部存储 114
4.5 小结 117
第5章 PHP的编译与执行 118
5.1 语言的编译与执行 118
5.1.1 编译型语言 119
5.1.2 解释型语言 124
5.2 Zend虚拟机 126
5.2.1 opline指令 127
5.2.2 zend_op_array 130
5.2.3 zend_execute_data 133
5.2.4 zend_executor_globals 134
5.3 PHP的编译 136
5.3.1 词法、语法解析 136
5.3.2 抽象语法树编译 145
5.3.3 pass_two() 157
5.4 PHP的执行 160
5.4.1 handler的定义 160
5.4.2 调度方式 162
5.4.3 执行流程 165
5.4.4 全局execute_data和opline 173
5.5 运行时缓存 177
5.6 Opcache 183
5.6.1 opcode优化 191
5.6.2 JIT 195
5.7 小结 196
第6章 函数 197
6.1 用户自定义函数 197
6.1.1 语法解析 200
6.1.2 抽象语法树的编译 202
6.2 内部函数 216
6.3 函数的调用 218
6.4 函数的执行 223
6.5 小结 231
第7章 面向对象 232
7.1 类 232
7.1.1 常量 235
7.1.2 成员属性 236
7.1.3 成员方法 240
7.1.4 类的编译 242
7.1.5 内部类 255
7.1.6 类的自动加载 255
7.2 对象 258
7.2.1 对象的创建 261
7.2.2 非静态成员属性的读写 266
7.2.3 对象的复制 270
7.2.4 对象的比较 271
7.2.5 对象的销毁 272
7.3 继承 273
7.3.1 常量的继承 281
7.3.2 成员属性的继承 282
7.3.3 成员方法的继承 284
7.4 动态属性 284
7.5 魔术方法 288
7.6 小结 291
第8章 命名空间 292
8.1 概述 292
8.2 命名空间的定义 293
8.3 命名空间的使用 298
8.3.1 use导入 299
8.3.2 动态用法 310
8.4 小结 310
第9章 PHP基础语法的实现 311
9.1 静态变量 312
9.2 常量 319
9.2.1 const 320
9.2.2 define() 322
9.3 全局变量 324
9.3.1 全局变量符号表 324
9.3.2 全局变量的访问 326
9.3.3 全局变量的销毁 328
9.3.4 超全局变量 328
9.4 分支结构 328
9.4.1 if 329
9.4.2 switch 334
9.5 循环结构 340
9.5.1 while 340
9.5.2 do while 343
9.5.3 for 345
9.5.4 foreach 347
9.6 中断及跳转 355
9.6.1 break/continue 355
9.6.2 goto 361
9.7 include/require 364
9.8 异常处理 371
9.8.1 PHP中的try catch 371
9.8.2 内核中的异常处理 380
9.9 break/continue LABEL语法的实现 382
9.10 小结 390
第10章 扩展开发 391
10.1 扩展的内部实现 391
10.2 扩展的构成及编译 395
10.2.1 脚本工具 398
10.2.2 扩展的编写步骤 404
10.2.3 config.m4 404
10.3 钩子函数 406
10.3.1 模块初始化阶段 406
10.3.2 请求初始化阶段 407
10.3.3 请求结束阶段 408
10.3.4 post deactivate阶段 409
10.3.5 模块关闭阶段 410
10.4 全局资源 412
10.5 ini配置 414
10.6 函数 419
10.6.1 内部函数注册 420
10.6.2 函数参数解析 423
10.6.3 引用传参 438
10.6.4 函数返回值 442
10.6.5 函数调用 444
10.7 Zval的操作 449
10.7.1 zval的创建及获取 449
10.7.2 变量复制 453
10.7.3 引用计数 454
10.7.4 字符串操作 457
10.7.5 数组操作 458
10.8 常量 464
10.9 面向对象 465
10.9.1 内部类注册 465
10.9.2 成员属性 467
10.9.3 成员方法 471
10.9.4 常量 472
10.9.5 类的实例化 473
10.10 资源 473
10.11 小结 479