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的类型?如果是这样,我该怎么做?

乔什·沃兹曼

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

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

如何在c#中使用反射获取列表类型元素

来自分类Dev

使用Java反射获取类数组的类型

来自分类Dev

使用Java反射获取类数组的类型

来自分类Dev

使用反射获取列表属性类型

来自分类Dev

如何使用反射递归获取类型的属性?

来自分类Dev

仅使用反射通过类型参数区分通用方法?

来自分类Dev

使用反射调用方法时的通用返回类型

来自分类Dev

使用Scala在通用类型上调用方法并反射包

来自分类Dev

C#使用反射获取通用参数名称

来自分类Dev

从列表<T>反射获取列表<>(来自通用容器类型的容器类型)

来自分类Dev

如何使用反射库获取子类型的子类型

来自分类Dev

如何在C#中使用反射从类型和设置属性值中按名称获取属性

来自分类Dev

使用ClassTag获取包含通用类型

来自分类Dev

C#反射-从基类中获取父类的通用参数类型

来自分类Dev

使用反射从动态方法获取参数类型

来自分类Dev

使用反射获取所有Integer数据类型字段

来自分类Dev

如何使用反射从动态(匿名类型)对象获取属性?

来自分类Dev

如何使用反射从动态(匿名类型)对象获取属性?

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

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

  9. 9

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

  10. 10

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

  11. 11

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

  12. 12

    如何在c#中使用反射获取列表类型元素

  13. 13

    使用Java反射获取类数组的类型

  14. 14

    使用Java反射获取类数组的类型

  15. 15

    使用反射获取列表属性类型

  16. 16

    如何使用反射递归获取类型的属性?

  17. 17

    仅使用反射通过类型参数区分通用方法?

  18. 18

    使用反射调用方法时的通用返回类型

  19. 19

    使用Scala在通用类型上调用方法并反射包

  20. 20

    C#使用反射获取通用参数名称

  21. 21

    从列表<T>反射获取列表<>(来自通用容器类型的容器类型)

  22. 22

    如何使用反射库获取子类型的子类型

  23. 23

    如何在C#中使用反射从类型和设置属性值中按名称获取属性

  24. 24

    使用ClassTag获取包含通用类型

  25. 25

    C#反射-从基类中获取父类的通用参数类型

  26. 26

    使用反射从动态方法获取参数类型

  27. 27

    使用反射获取所有Integer数据类型字段

  28. 28

    如何使用反射从动态(匿名类型)对象获取属性?

  29. 29

    如何使用反射从动态(匿名类型)对象获取属性?

热门标签

归档