用C++11开发PHP 7扩展:ppts_for_php2017韩天峰77页完整教程详解

发布时间:2026/11/4 2:06:58
用C++11开发PHP 7扩展:ppts_for_php2017韩天峰77页完整教程详解

【免费下载链接】ppts_for_php2017

2017 第三届PHP全球开发者大会PPT/Keynote

项目地址:https://gitcode.com/gh_mirrors/ppt/ppts_for_php2017
点击查看免费下载

本文带你吃透ppts_for_php2017开源仓库中收录的 77 页演讲 PPT——《使用C++11开发PHP7扩展》,作者为 Swoole 团队核心成员韩天峰(Rango)。这份资料出自 2017 第三届 PHP 全球开发者大会,是理解PHP 扩展开发、PHP-X 开发框架与C++ 嵌入 ZendVM的完整教程,新手也能按图索骥上手用 C++11 开发 PHP 7 扩展。

📥 快速获取:30 秒拿到这份 77 页 PPT

仓库只读,直接 clone 即可:

git clone https://gitcode.com/gh_mirrors/ppt/ppts_for_php2017

目标文件就在仓库根目录:

  • 📄 韩天峰——使用C++开发PHP7扩展.pdf —— 本文详解的主角
  • 📖 README.md —— 说明每份 PPT 版权归讲师所有,是否放出由讲师决定
  • 📜 LICENSE.md —— 仓库采用 MIT License(Copyright 2017 DevLink)

💡 该仓库收录了第三届 PHP 全球开发者大会全部 12 场演讲的 PPT/Keynote,本文只聚焦韩天峰的这一份。

🗺️ 全局结构:4 大章节一张表看懂

77 页 PPT 分为四个章节,先建立整体地图,再逐章拆解:

章节页码主题适合谁看
01P1–P25PHP 原生扩展:加载机制、ext_skel、Zend API 与常见坑PHP 工程师(基础)
02P26–P64用 C++11 编写 PHP 扩展:PHP-X 的 Variant/Array/Resource/ObjectC++ / 双语言开发者(核心)
03P65–P70在 C++ 程序中嵌入 PHP ZendVM,调用 Composer 包高级玩法(进阶)
04P71–P77PHP-X 实践:RocksDB、Gtk、stdext 与想象力清单实战参考(进阶)

01 章精读:PHP 原生扩展机制与扩展创建流程(P1–P25)

扩展加载的 5 个关键步骤

PPT 开篇用 5 步讲清了PHP 扩展加载过程,这是读懂后续一切的基础:

  1. Zend 引擎调用php_load_extension函数
  2. 加载并执行.so中的get_module函数,返回zend_module_entry
  3. 该结构体中设置了M(R)INIT、M(R)SHUTDOWN四个函数指针
  4. 执行zend_startup_module_ex函数启动扩展
  5. 整个加载依赖 glibc 的dl库——本质就是标准的 Linux 动态链接库

ext_skel 六步创建扩展工程

创建第一个扩展工程的建议流程(P8):

  • ext_skel骨架生成工具 → 编辑config.m4
  • 修改extension.h头文件声明扩展函数 → 修改extension.c实现逻辑
  • phpize→configure→make→make install
  • 讲师建议:直接参考其他扩展的源码,比啃文档高效得多

参数输入与返回值:必须背下的 3 个"坑"

Zend API 参数输入用单字母类型符:b布尔、l整型(long)、d浮点(double)、s字符串、a数组、z任意变量,|表示可选参数,&表示引用。

PPT 特意标红的坑,迁移到 PHP 7 时最容易踩:

类型正确写法常见错误
字符串长度PHP 7 必须用long沿用 PHP 5 的int
整型必须long写成int
浮点必须double写成float

返回值则有两种方式:修改return_value,或使用RETURN_*宏(P14)。

Zend API 为什么难用?C++ 出场了

P21 总结出 Zend API 的 5 大痛点:大量使用宏、API 名称太长参数太多、API 分散在众多 .h/.c 文件、大量裸指针容易出错、没有任何教程或手册。

而 C++11 相对 50 年历史的 C 语言:面向对象封装性好、有模板泛型、有 STL 容器、通用编程。讲师的结论(P25)一针见血:

C/C++ 是唯一能与 PHP 直接在内存堆栈上互调用的语言,其他语言互调都得上 RPC;PHP 与 C++ 动静结合互补性强。最大的障碍只有一个——Zend API 太难用了。

于是就有了 PHP-X。

02 章精读:用 PHP-X 编写 C++11 PHP 扩展(P26–P64)

这是全篇的核心章节:PHP-X 是一个用 C++11 封装 Zend API 的扩展开发框架,把 PHP 的 5 种变量形态映射成了好写的 C++ 类型。

一张架构地图(P28)

  • 扩展模块(C++11)向下对接Zend API(C),向上对接SAPI与PHP 扩展,同时支持C++ 嵌入 PHP
  • 核心类型映射:PHP-XVariant↔zval、Array↔zend_array、Resource↔zend_resource、Object↔zend_object、String↔zend_string

四大核心类型各讲什么

类型页码覆盖内容
Variant(PHP 变量)P30–P37赋值、Scalar 与非 Scalar 类型转换、类型推断、生命周期、堆内存管理
Array(PHP 数组)P38–P44HashTable 封装、List/Map 用法、遍历、合并、排序与查找
Resource(PHP 资源)P45–P49打通 PHP 与 C++:把 C++ 指针存进 PHP 变量,函数间互相传递资源变量
Object(PHP 对象)P51–P55创建对象、执行方法、读写属性、甚至读写 C++ 指针

落地部分:从写函数到 make install

P56–P64 给出完整实操路线:

  1. 实现扩展函数(P57)→实现扩展类(P58)→实现类方法(P59)
  2. 注入 phpinfo(P60)——用phpinfo()输出验证扩展加载成功
  3. PHP-X 宏(P61–P62)——一行代码定义扩展入口,省去大量样板
  4. Makefile 编写(P63)与编译安装(P64)

对比原生 ext_skel 流程,PHP-X 用宏 + C++11 的封装把 P21 吐槽的"宏多、名字长、API 散、指针裸"问题基本都包掉了。

03 章精读:在 C++ 程序中嵌入 ZendVM(P65–P70)

这一章换个方向——不是"PHP 调 C++",而是"C++ 调 PHP":

  • 业界惯例:Python(boost 嵌入)、Lua(游戏)、JS(Qt),而PHP Embed 一直"没人用"
  • 嵌入后 C++ 程序可以:调用 ZendVM 提供的功能、调用各类 PHP 扩展的功能、直接调用PHP 类库和框架
  • 最惊艳的一页(P70):C++ 程序中使用 Composer 包——C++ 侧直接消费 PHP 生态

04 章精读:PHP-X 实践与想象力清单(P71–P77)

三个现成案例

扩展作用
rocksdbFacebook 开源 KV 数据库 RocksDB 的 PHP 客户端
Gtk用 Gtk 图形界面库开发跨平台桌面软件(PPT 内附演示截图)
stdext标准库扩展,补充 Standard 和 SPL 的不足

5 条"想象力"清单(P76)

  1. PHP 可以用 C++ 扩展实现多线程
  2. PHP-X 支持Windows 平台,可以开发 Windows 的 PHP 扩展
  3. 程序中大量运算的逻辑可以改为 C++ 扩展实现
  4. 用 PHP-X 开发商业软件,避免源码泄漏
  5. 利用 Facebook / Google / Microsoft / Intel / Tencent 等巨头开源的 C++ 库来扩展 PHP

🧭 学习建议与 FAQ

  • IDE 选什么?PPT 明确推荐Eclipse(P72):自动提示、自动补齐、语法搜索、自动跳转,"代码即文档"。VS Code 配 C++ 插件同样适用。
  • 零基础能看吗?能。建议路线:先读 01 章建立概念 → 跑通 ext_skel 六步 → 再切 PHP-X,C++11 只要求基本语法 + STL。
  • 和 PHP 8 还兼容吗?本 PPT 针对 PHP 7(C++11)。PHP 8 的扩展机制有变化(如 JIT 与属性),但"Zend API 难用、C++11 封装"的思路依然成立。
  • 资料版权?PPT 版权归讲师韩天峰所有,仓库 README.md 已注明由讲师自行决定放出。

📚 延伸阅读:仓库里其他值得一读的 PHP 进阶 PPT

学完扩展开发,可以接着看同仓库的几份"硬核"演讲:

  • 🧩 高永芝——复杂PHP系统性能瓶颈排查及优化.pdf —— 性能瓶颈排查实战
  • ⚡ 司超——Swoole2.0原生协程高性能开发实践.pdf —— 同为 Swoole 团队,协程与 PHP 扩展的姊妹篇
  • 🔮 惠新宸——The Next Gen of PHP.pdf —— PHP 之父视角的下一代 PHP
  • 🗄️ 宋青见——云原生的 MySQL 托管服务架构及读写分离的优化(PHP).pdf.pdf) —— 数据库侧优化

总结:这份 77 页 PPT 的价值在于"承上启下"——用前 25 页讲透原生扩展与 Zend API 的痛点,用后 52 页给出 C++11 的现代解法 PHP-X,最后展望了 C++ 嵌入 ZendVM 的生态可能。如果你想把计算密集型逻辑从 PHP 下沉到 C++、或基于 C++ 开源库开发高性能 PHP 扩展,韩天峰——使用C++开发PHP7扩展.pdf 是目前中文社区里少有的系统资料。

【免费下载链接】ppts_for_php2017

2017 第三届PHP全球开发者大会PPT/Keynote

项目地址:https://gitcode.com/gh_mirrors/ppt/ppts_for_php2017
点击查看免费下载
上一篇:LikeC4 VS Code 扩展功能全景:从语言服务到 AI 语义布局的版本演进
下一篇:Flower 模型 Lizzy 7B 硬件需求指南:GPU 显存、KV Cache 与 GGUF 本地推理的容量规划

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考