TypePHP 编译器 https://swoole.com/aot/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

45 lines
2.0 KiB

<blog>
# 不支持的 PHP 特性
AOT 编译对 PHP 运行时做了静态化假设,因此**并非所有 PHP 特性都可编译**。遇到编译报错(如 `Not implemented`)时,应据此清单判断是设计限制、有意规则,还是尚未实现。
Sources: [docs/INCOMPATIBLE_PHP_FEATURES.md](docs/INCOMPATIBLE_PHP_FEATURES.md) · [docs/PHP_INCOMPATIBILITY_CLASSIFICATION.md](docs/PHP_INCOMPATIBILITY_CLASSIFICATION.md)
## 不兼容分类
`PHP_INCOMPATIBILITY_CLASSIFICATION.md` 把限制分成四类,避免维护多份清单:
| 类别 | 含义 |
|---|---|
| **Hard Limit** | 架构上无法支持(如依赖运行时动态加载的特性) |
| **Intentional Rule** | 有意为之的设计规则(如可执行代码必须放进 `main()`) |
| **Pending** | 计划支持但尚未实现 |
| **Partial** | 部分支持,有约束条件 |
Sources: [docs/PHP_INCOMPATIBILITY_CLASSIFICATION.md](docs/PHP_INCOMPATIBILITY_CLASSIFICATION.md)
## 常见设计规则
- **游离可执行代码**:文件顶层的可执行语句(循环、函数调用)不被允许,必须放在 `main()` 或函数体内;
- **固定值类型属性不可 `unset`/赋 `null`**:见 [原生类型映射](native-types);
- **显式返回类型**:函数/方法必须声明返回类型(`parseFunctionDecl()` 会 `fatalError`)。
Sources: [docs/QUICKSTART.md](docs/QUICKSTART.md#L191-L203) · [src/Preprocessor.php](src/Preprocessor.php#L497-L536)
## 维护约定
1. 兼容性变化须**同时更新** `INCOMPATIBLE_PHP_FEATURES.md` 与分类文档;
2. 所有语法/语义限制统一链接到当前兼容性清单,避免重复;
3. 功能是否支持以 **PHPT / PHPUnit 回归测试** 为准;
4. 历史研究文档(hhvm/kphp/peachpie 对比等)保留原始结论,不悄然改写为当前状态。
Sources: [docs/README.md](docs/README.md#L30-L35)
## 相关阅读
- 运行期能力边界 → [PHPX 运行时集成](runtime)
- 类型约束 → [原生类型映射](native-types)
- 属性/类约束 → [函数与类生成](gen-functions-classes)
</blog>