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.
 
 

2.0 KiB

不支持的 PHP 特性

AOT 编译对 PHP 运行时做了静态化假设,因此并非所有 PHP 特性都可编译。遇到编译报错(如 Not implemented)时,应据此清单判断是设计限制、有意规则,还是尚未实现。

Sources: docs/INCOMPATIBLE_PHP_FEATURES.md · docs/PHP_INCOMPATIBILITY_CLASSIFICATION.md

不兼容分类

PHP_INCOMPATIBILITY_CLASSIFICATION.md 把限制分成四类,避免维护多份清单:

类别 含义
Hard Limit 架构上无法支持(如依赖运行时动态加载的特性)
Intentional Rule 有意为之的设计规则(如可执行代码必须放进 main()
Pending 计划支持但尚未实现
Partial 部分支持,有约束条件

Sources: docs/PHP_INCOMPATIBILITY_CLASSIFICATION.md

常见设计规则

  • 游离可执行代码:文件顶层的可执行语句(循环、函数调用)不被允许,必须放在 main() 或函数体内;
  • 固定值类型属性不可 unset/赋 null:见 原生类型映射
  • 显式返回类型:函数/方法必须声明返回类型(parseFunctionDecl()fatalError)。

Sources: docs/QUICKSTART.md · src/Preprocessor.php

维护约定

  1. 兼容性变化须同时更新 INCOMPATIBLE_PHP_FEATURES.md 与分类文档;
  2. 所有语法/语义限制统一链接到当前兼容性清单,避免重复;
  3. 功能是否支持以 PHPT / PHPUnit 回归测试 为准;
  4. 历史研究文档(hhvm/kphp/peachpie 对比等)保留原始结论,不悄然改写为当前状态。

Sources: docs/README.md

相关阅读