自动加载Hack类型别名

时间:2017-01-10 19:25:57

标签: composer-php hhvm spl-autoload-register psr-4 hacklang

有没有办法自动加载Hack类型别名?我已将它们放在符合PSR-4标准的路径上的单独文件中,虽然我知道它们只是Hack而且在PSR-0或PSR-4中没有正式提及,但我认为其中一个以下情况会发生:

  1. HHVM会将类型别名扩展为其基本类型,或
  2. spl_autoload会将类型视为类,函数或接口名称,并执行脚本,解析别名。
  3. 然而,两者都没有发生。在运行时,由于与类型提示不兼容,方法调用失败,即:

      

    捕获致命错误:传递给{method_name}的参数必须是{type_alias},{concrete_type}的实例。

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

2 个答案:

答案 0 :(得分:2)

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

hhvm-autoload个包,它增加了对编辑器生成必要地图的支持。

答案 1 :(得分:0)

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

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