PHP在Hack中使用反射来获取通用类型

汤玛士

我正在使用HHVM探索Hack,并且正在使用泛型。我有以下基本存储库:

class BaseRepository<T>{
     public function __construct(T $model){
        ...
     }
}

然后,我有子类UserRepository,如下所示:

class UserRepository extends BaseRepository<User> {

}

我想要做的是使用反射在运行时获取T的类型。

我尝试了以下方法:

$reflectionClass = new ReflectionClass('UserRepository');
$parameters = $reflectionClass->getConstructor()->getParameters();
var_dump($parameters);

输出以下内容:

array(1) {
  [0]=>
  object(ReflectionParameter)#854 (2) {
   ["info"]=>
   array(9) {
     ["index"]=>
      int(0)
      ["name"]=>
      string(5) "model"
      ["type"]=>
      string(0) ""
      ["type_hint"]=>
      string(1) "T"
      ["function"]=>
      string(11) "__construct"
      ["class"]=>
      string(36) "BaseRepository"
      ["nullable"]=>
      bool(true)
      ["attributes"]=>
      array(0) {
      }
      ["is_optional"]=>
      bool(false)
    }
    ["name"]=>
    string(5) "model"
  }

}

然后,我遍历参数并调用:$ parameter-> getClass()

返回空值。

是否可以在运行时使用反射获取T的类型?如果是这样,我该怎么做?

乔什·沃兹曼(Josh Watzman)

不幸的是,现在无法在运行时获得实际的遗传类型。HHVM具有针对它们的类​​型擦除语义,这意味着我们实际上在运行代码时不知道T的特定类型是什么。但是,能够做到这一点通常会很有用,并且我们已经考虑了如何添加它,称为“ reifiedgenerics”。但这是一个非常复杂的,涉及变更的事情,因此您不应该期望它很快出现。对不起!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PHP在Hack中使用反射获取通用类型

来自分类Dev

Delphi在类过程中使用反射来获取动态类类型

来自分类Dev

在Go中使用反射来获取结构的名称

来自分类Dev

使用反射获取字段的通用类型

来自分类Dev

使用通用类型对象的反射获取属性

来自分类Dev

如何使用反射来动态调用类型?

来自分类Dev

使用Kotlin中的泛型类型的反射来获取静态字段的值

来自分类Dev

飞镖,如何使用反射获取方法参数的通用类型?

来自分类Dev

如何使用反射获取特定类型的通用列表

来自分类Dev

如何使用反射来处理所有类型?

来自分类Dev

如何使用反射来获取/设置属性的值?

来自分类Dev

通过反射获取通用类型的超级接口

来自分类Dev

使用反射来调用方法

来自分类Dev

使用反射获取通用词典<,>的键值

来自分类Dev

使用反射获取通用词典<,>的键值

来自分类Dev

使用HashMap和反射来调用具有可变参数类型的方法

来自分类Dev

Scala使用扩展特征的类的反射来访问运行时类型的成员

来自分类Dev

如何使用Scala反射来找到自我类型特征?

来自分类Dev

如何在Java中使用带引号的反射来打印String数组

来自分类Dev

我可以在代码的静态部分中使用Google反射来查找子类吗?

来自分类Dev

如何在Java类的公共成员中使用反射来调用方法?

来自分类Dev

为什么我不能使用反射来获取LinkButton事件的事件处理程序?

来自分类Dev

使用protobuf反射来获取c ++中的布尔值字段描述符

来自分类Dev

为什么我不能使用反射来获取LinkButton事件的事件处理程序?

来自分类Dev

使用反射来修改对象的结构

来自分类Dev

使用反射来调用公共方法

来自分类Dev

使用反射来修改对象的结构

来自分类Dev

在Go中使用反射检查兼容类型

来自分类Dev

如何在C#中使用反射获取类型的全限定名称

Related 相关文章

  1. 1

    PHP在Hack中使用反射获取通用类型

  2. 2

    Delphi在类过程中使用反射来获取动态类类型

  3. 3

    在Go中使用反射来获取结构的名称

  4. 4

    使用反射获取字段的通用类型

  5. 5

    使用通用类型对象的反射获取属性

  6. 6

    如何使用反射来动态调用类型?

  7. 7

    使用Kotlin中的泛型类型的反射来获取静态字段的值

  8. 8

    飞镖,如何使用反射获取方法参数的通用类型?

  9. 9

    如何使用反射获取特定类型的通用列表

  10. 10

    如何使用反射来处理所有类型?

  11. 11

    如何使用反射来获取/设置属性的值?

  12. 12

    通过反射获取通用类型的超级接口

  13. 13

    使用反射来调用方法

  14. 14

    使用反射获取通用词典<,>的键值

  15. 15

    使用反射获取通用词典<,>的键值

  16. 16

    使用HashMap和反射来调用具有可变参数类型的方法

  17. 17

    Scala使用扩展特征的类的反射来访问运行时类型的成员

  18. 18

    如何使用Scala反射来找到自我类型特征?

  19. 19

    如何在Java中使用带引号的反射来打印String数组

  20. 20

    我可以在代码的静态部分中使用Google反射来查找子类吗?

  21. 21

    如何在Java类的公共成员中使用反射来调用方法?

  22. 22

    为什么我不能使用反射来获取LinkButton事件的事件处理程序?

  23. 23

    使用protobuf反射来获取c ++中的布尔值字段描述符

  24. 24

    为什么我不能使用反射来获取LinkButton事件的事件处理程序?

  25. 25

    使用反射来修改对象的结构

  26. 26

    使用反射来调用公共方法

  27. 27

    使用反射来修改对象的结构

  28. 28

    在Go中使用反射检查兼容类型

  29. 29

    如何在C#中使用反射获取类型的全限定名称

热门标签

归档