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
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>
|
|
|