有没有办法自动加载Hack类型别名?我已将它们放在符合PSR-4标准的路径上的单独文件中,虽然我知道它们只是Hack而且在PSR-0或PSR-4中没有正式提及,但我认为其中一个以下情况会发生:
spl_autoload
会将类型视为类,函数或接口名称,并执行脚本,解析别名。然而,两者都没有发生。在运行时,由于与类型提示不兼容,方法调用失败,即:
捕获致命错误:传递给{method_name}的参数必须是{type_alias},{concrete_type}的实例。
编辑:我应该提到我是专门使用Composer的。我不确定这是否是特定于Composer的。
答案 0 :(得分:2)
是的,您可以在HHVM中自动加载类型。您需要使用类映射方法和HH\autoload_set_paths
函数。
有hhvm-autoload个包,它增加了对编辑器生成必要地图的支持。
答案 1 :(得分:0)
我不相信这是可能的。 PHP没有注册自动加载的类型提示。并且它不需要,因为实现类型提示的唯一方法是传递该类或子类,其构造将触发自动加载器调用。因此,在检查解释器时,解释器不可能知道类型提示。
这只是Hack中的一个问题,因为类型别名会引入这种可能性。为了与PHP保持一致,我希望上面提到的两个唯一可行的解决方案是HHVM在编译字节码时扩展类型别名。