【问题标题】:Autoloading Hack type aliases自动加载 Hack 类型别名
【发布时间】:2017-05-25 09:53:16
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    hhvm-autoload 包增加了对生成必要映射到作曲家的支持。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-17
        • 1970-01-01
        • 2016-12-05
        • 2015-09-02
        • 1970-01-01
        相关资源
        最近更新 更多