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.
 
 

1.3 KiB

yield / generator 限制

TypePHP 的 generator 基于 PHP Fiber 运行。generator 函数或方法会返回 TypePHP\FiberGenerator,该对象实现 Iterator,但不是 PHP 内置 Generator 实例。

不支持

  • 不支持声明返回类型为 Generator;请使用 IteratorTraversableiterableobjectmixed,或省略返回类型。
  • 不支持按引用返回的 generator,例如 function &gen() { yield 1; }
  • 不支持 generator 参数按引用传递。
  • 不支持 generator 可变参数。
  • 不支持 by-reference yield 语义。
  • 不支持在动态 PHP 脚本中使用 foreach 直接遍历 TypePHP Native generator 返回的 TypePHP\FiberGenerator
  • 不保证 instanceof GeneratorReflectionGeneratorGenerator 内部实现细节与 Zend 原生 generator 兼容。

受限行为

  • yield from 可以转发数组和 Traversable 的 key/value;委托对象是 generator 时可以读取其 return value。
  • TypePHP Native foreach 可以遍历动态 PHP 返回的 Zend 原生 generator;反向由 ZendVM foreach 驱动 TypePHP Native generator 暂不支持。
  • generator 的执行依赖 Fiber;如果当前 PHP 运行环境禁用或缺失 Fiber,则无法运行。
  • generator body 在 Fiber 内执行,析构、异常传播、force-close 与 Zend 原生 generator 可能存在边界差异。