3

私は HHVM でハックを調査しており、ジェネリックを使用しています。次のベース リポジトリがあります。

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()

null を返します。

リフレクションを使用して実行時に T の型を取得することは可能ですか? もしそうなら、どうすればいいですか?

4

1 に答える 1