通过 PHP FFI 调用 C 动态库,以编程方式构建 WebAssembly (Wasm) 模块的 PHP 库。
- 纯 PHP 代码生成 Wasm 二进制模块
- 支持完整的 Wasm 指令集(算术、位运算、比较、控制流、内存、引用等)
- 支持 debug 模式,生成带调试信息的 Wasm 模块
- 链式调用 API 设计,代码更简洁
- 支持函数导入/导出、全局变量、内存管理、数据段等
- PHP >= 8.2
- 启用 FFI 扩展 (
ext-ffi)
- Windows Linux Macos
composer require kingbes/wasm
<?php
use Kingbes\Wasm\Module;
use Kingbes\Wasm\ValType;
use Kingbes\Wasm\NumType;
// 1. 创建模块
$mod = new Module();
// 2. 创建函数
$fn = $mod->newFn([
"name" => "add",
"params" => [ValType::I32, ValType::I32],
"results" => [ValType::I32],
]);
// 3. 编写函数体(链式调用)
$fn->getLocal(0) // 获取第1个参数
->getLocal(1) // 获取第2个参数
->add(NumType::I32); // i32 加法
// 4. 提交并导出函数
$mod->commit($fn);
// 5. 编译为 wasm 文件
$mod->compile("./add.wasm");
| 类 |
说明 |
Module |
Wasm 模块管理:创建函数、全局变量、内存、数据段、编译输出 |
Func |
Wasm 函数体编写:常量、变量、算术、位运算、比较、控制流、内存、引用等指令 |
ValType |
值类型枚举:I32, I64, F32, F64, V128, FuncRef, ExternRef |
NumType |
数值类型枚举:I32, I64, F32, F64 |
RefType |
引用类型枚举:FuncRef, ExternRef |
ConstExpression |
常量表达式,用于全局变量初始化 |
FunType |
函数类型对象,用于 debug 模式 |
php-wasm/
├── src/ # PHP 源码
│ ├── Base.php # 基类(FFI 加载、数组辅助方法)
│ ├── Module.php # 模块类
│ ├── Func.php # 函数类
│ ├── ValType.php # 值类型枚举
│ ├── NumType.php # 数值类型枚举
│ ├── RefType.php # 引用类型枚举
│ ├── ConstExpression.php # 常量表达式类
│ ├── FunType.php # 函数类型类
│ └── Wasm.h # C 头文件(FFI 定义)
├── core/ # C/V 源码
├── lib/windows/ # 动态链接库
│ └── wasm.dll
├── test/ # 测试
├── doc/ # 文档
├── composer.json
└── LICENSE # MIT 许可证
MIT