自动加载 Hack 类型别名

Autoloading Hack type aliases

有什么方法可以自动加载 Hack 类型的别名吗?我将它们放在符合 PSR-4 的路径上的单独文件中,虽然我知道它们是 Hack-only 并且没有在 PSR-0 或 PSR-4 中正式提及,但我认为会发生以下情况之一:

  1. HHVM 会将类型别名扩展为其基本类型,或者
  2. spl_autoload 会将类型视为 class、函数或接口名称并执行脚本,解析别名。

然而,两者都没有发生。在运行时,由于与类型提示不兼容,方法调用失败,即:

Catchable fatal error: Argument passed to {method_name} must be an instance of {type_alias}, {concrete_type} given.

编辑:我应该提到我专门使用 Composer。我不确定这是否是特定于 Composer 的。

我不相信这是可能的。 PHP 没有为自动加载注册类型提示。它不需要,因为实现类型提示的唯一方法是传递 class 或 subclasses,它们的构造会触发自动加载器调用。那么解释器在检查它时不可能不知道类型提示。

这只是 Hack 中的一个问题,因为类型别名引入了这种可能性。为了与 PHP 保持一致,我希望上述两个解决方案中唯一可行的解​​决方案是 HHVM 在编译字节码时扩展类型别名。

是的,您可以在 HHVM 中自动加载类型。您需要使用 class-map 方法和 HH\autoload_set_paths 函数。

hhvm-autoload 包增加了对在 composer 中生成必要地图的支持。