介绍PHP的一些内部机制,包括变量存储、数组实现等,随后详细介绍如何编写PHP扩展
目录
目录 ............................................................................................................................................ 2 一、 基础知识 ..................................................................................................................... 4
1.1 PHP变量的存储 .................................................................................................... 4
1.1.1 zval结构 ......................................................................................................... 4 1.1.2 引用计数 ........................................................................................................ 5 1.1.3 zval状态 ......................................................................................................... 5 1.1.4 zval状态切换 ................................................................................................. 6 1.1.5 参数传递 ........................................................................................................ 9 1.2 HashTable结构 ....................................................................................................... 9
1.2.1 数据结构 ...................................................................................................... 10 1.2.2 PHP数组 ...................................................................................................... 13 1.2.3 变量符号表 .................................................................................................. 14 1.3 内存和文件 ........................................................................................................... 15 二、 Extensions 的编写 ................................................................................................... 17
2.1 Hello World ........................................................................................................... 17
2.1.1 声明导出函数 .............................................................................................. 19 2.1.2 声明导出函数块 .......................................................................................... 20 2.1.3 填写模块信息 .............................................................................................. 21 2.1.4 实现导出函数 .............................................................................................. 23 2.2 使用参数 ............................................................................................................... 24
2.2.1 标准方法 ...................................................................................................... 25 2.2.2 底层方法 ...................................................................................................... 27 2.2.3 引用传递 ...................................................................................................... 29 2.2.4 编译检查(TODO) ........................................................................................ 30 2.3 返回值................................................................................................................... 30
2.3.1 返回引用 ...................................................................................................... 31 2.4 启动和终止函数 ................................................................................................... 33 2.5 调用PHP函数 ..................................................................................................... 34 2.6 访问PHP变量 ..................................................................................................... 37
2.6.1 设置 .............................................................................................................. 37 2.6.2 获取 .............................................................................................................. 38 2.6.3 常量 .............................................................................................................. 39 2.7 输出信息 ............................................................................................................... 42 三、 高级主题 ................................................................................................................... 43
3.1 使用数组 ............................................................................................................... 43
3.1.1 关联数组元素 .............................................................................................. 43 3.1.2 非关联数组元素 .......................................................................................... 44 3.2 使用资源 ............................................................................................................... 45
3.2.1 注册资源类型 .............................................................................................. 45 3.2.2 注册资源 ...................................................................................................... 46 3.2.3 获取资源 ...................................................................................................... 47 3.2.4 维护引用计数 .............................................................................................. 48