TypePHP:把 PHP 提前编译为原生程序
一分钟看懂
TypePHP 是一个面向 PHP 的 AOT(提前编译)编译器。它把 PHP 源码转换为 C++17,再编译成直接运行在 CPU 上的原生机器码,可以产出命令行可执行文件、PHP 扩展或共享库。开发者仍使用熟悉的 PHP 语法,但可以为性能关键路径补充更明确的类型,让编译器生成静态类型代码。
它不同于 OPcache 或 PHP JIT:前者缓存字节码,后者在运行时根据热点进行编译,而 TypePHP 在发布前就完成编译,不需要解释 opcode 或等待 JIT 预热。项目还可以与 Zend 运行时和支持的 PHP 内置功能互操作,因此目标不是抛弃 PHP 生态,而是在明确的兼容边界内获得原生输出和更可预测的性能。
你可以用它做什么
- 制作原生命令行工具:把 PHP 程序发布为可执行文件,不再以普通 PHP 源码形式交付。
- 加速数值密集逻辑:使用原生标量和强类型容器优化计算热点。
- 开发 PHP 扩展:将编译后的函数和类作为
.so或.dll加载到 PHP。 - 生成共享库:把一组 TypePHP API 编译成可复用的原生库。
- 混合 PHP 与 C++:为性能关键内核使用 C++,其余逻辑保留 PHP 写法。
- 探索 WASI 与浏览器目标:在工具链支持的条件下输出相应组件。
主要能力
TypePHP 支持二进制、扩展和共享库三种构建模式,并提供 project.yml 管理多文件源码、编译优化、条件路径和原生链接依赖。原生 int、float、bool 可映射为 C++ 标量,还提供高精度整数、小数和浮点类型,以及带固定元素类型的 vector、map 等容器。
项目支持若干编译期属性,用来生成 Getter、Setter、With、构造函数、字符串输出和数组转换方法;也支持在字符串、数组等值上使用更接近对象的方法调用。编译器本身由 PHP 编写,并可以用 TypePHP 编译自己,是一个自举项目。
适合哪些人
- 想保留 PHP 开发体验,同时优化计算热点的团队。
- 希望用 PHP 制作命令行二进制或原生扩展的开发者。
- 对编译器、渐进类型和语言互操作感兴趣的研究者。
- 能够接受针对代码进行兼容性改造的新项目或实验项目。
它目前不适合直接拿来无改动编译任意 WordPress、Laravel 或高度动态的遗留应用。
怎么开始使用
项目要求 PHP 8.4–8.5 CLI 与开发头文件、匹配的 PHP embed 库、支持 C++17 的 GCC/Clang、CMake、Composer 以及部分高精度数学库。可以通过 Composer 作为开发依赖安装,再用 tpc.php 编译单个文件或项目配置。
建议从官方 Hello World 和小型数值示例开始,确认本机工具链正常,再选择一个边界清晰的纯计算模块测试。先对比正确性、构建复杂度和真实基准,再决定是否扩大采用范围。
使用前需要知道
项目明确处于积极开发阶段,只支持一个定义清楚、可测试的 PHP 子集,不承诺对所有动态 PHP 程序即插即用。全局作用域、动态引用、闭包、反射和部分声明模式存在限制;二进制模式还要求符合规则的 main() 入口。采用前必须阅读官方兼容模型与不兼容功能列表。
生成原生文件不代表完全没有运行时依赖,二进制仍可能需要匹配的 PHPX、libphp 和所配置的原生库。Linux x64 是主要开发与完整测试平台,其他系统和架构的可用程度还取决于工具链。性能宣传也应通过自己的负载验证,普通 I/O 型业务未必明显受益。