【免费下载链接】ppts_for_php2017
2017 第三届PHP全球开发者大会PPT/Keynote
本文带你吃透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 分为四个章节,先建立整体地图,再逐章拆解:
| 章节 | 页码 | 主题 | 适合谁看 |
|---|---|---|---|
| 01 | P1–P25 | PHP 原生扩展:加载机制、ext_skel、Zend API 与常见坑 | PHP 工程师(基础) |
| 02 | P26–P64 | 用 C++11 编写 PHP 扩展:PHP-X 的 Variant/Array/Resource/Object | C++ / 双语言开发者(核心) |
| 03 | P65–P70 | 在 C++ 程序中嵌入 PHP ZendVM,调用 Composer 包 | 高级玩法(进阶) |
| 04 | P71–P77 | PHP-X 实践:RocksDB、Gtk、stdext 与想象力清单 | 实战参考(进阶) |
01 章精读:PHP 原生扩展机制与扩展创建流程(P1–P25)
扩展加载的 5 个关键步骤
PPT 开篇用 5 步讲清了PHP 扩展加载过程,这是读懂后续一切的基础:
- Zend 引擎调用
php_load_extension函数 - 加载并执行
.so中的get_module函数,返回zend_module_entry - 该结构体中设置了
M(R)INIT、M(R)SHUTDOWN四个函数指针 - 执行
zend_startup_module_ex函数启动扩展 - 整个加载依赖 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-X
Variant↔zval、Array↔zend_array、Resource↔zend_resource、Object↔zend_object、String↔zend_string
四大核心类型各讲什么
| 类型 | 页码 | 覆盖内容 |
|---|---|---|
| Variant(PHP 变量) | P30–P37 | 赋值、Scalar 与非 Scalar 类型转换、类型推断、生命周期、堆内存管理 |
| Array(PHP 数组) | P38–P44 | HashTable 封装、List/Map 用法、遍历、合并、排序与查找 |
| Resource(PHP 资源) | P45–P49 | 打通 PHP 与 C++:把 C++ 指针存进 PHP 变量,函数间互相传递资源变量 |
| Object(PHP 对象) | P51–P55 | 创建对象、执行方法、读写属性、甚至读写 C++ 指针 |
落地部分:从写函数到 make install
P56–P64 给出完整实操路线:
- 实现扩展函数(P57)→实现扩展类(P58)→实现类方法(P59)
- 注入 phpinfo(P60)——用
phpinfo()输出验证扩展加载成功 - PHP-X 宏(P61–P62)——一行代码定义扩展入口,省去大量样板
- 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)
三个现成案例
| 扩展 | 作用 |
|---|---|
| rocksdb | Facebook 开源 KV 数据库 RocksDB 的 PHP 客户端 |
| Gtk | 用 Gtk 图形界面库开发跨平台桌面软件(PPT 内附演示截图) |
| stdext | 标准库扩展,补充 Standard 和 SPL 的不足 |
5 条"想象力"清单(P76)
- PHP 可以用 C++ 扩展实现多线程
- PHP-X 支持Windows 平台,可以开发 Windows 的 PHP 扩展
- 程序中大量运算的逻辑可以改为 C++ 扩展实现
- 用 PHP-X 开发商业软件,避免源码泄漏
- 利用 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
相关推荐
PHP扩展开发终极指南:Zephir与PHP-CPP完整教程
PHP扩展开发终极指南:Zephir与PHP CPP完整教程 GitHub 加速计划的 awesome php 项目是一个精心策划的 PHP 资源列表,包含了各
文档PyTorch C++ 扩展开发指南:torch.utils.cpp_extension 完整 API 详解
PyTorch C++ 扩展开发指南:torch.utils.cpp_extension 完整 API 详解 torch.utils.cpp_extension
桌面应用Dev-C++插件开发教程:扩展IDE功能的完整开发者指南
Dev C++插件开发教程:扩展IDE功能的完整开发者指南 Dev C++作为一款轻量级、快速且免费的C/C++集成开发环境,深受广大开发者喜爱。今天,我将为您
开发工具IDE代码编辑器桌面应用
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考