Php Получить общий тип, используя отражение в Hack

Я изучаю Hack с 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"}

}

Затем я перебираю параметры и вызываю:
$ Параметрируемой> GetClass ()

Который возвращает ноль.

Можно ли получить тип T во время выполнения, используя отражение? Если так, как бы я это сделал?

3

Решение

К сожалению, сейчас невозможно получить реальный тип генетики во время выполнения. HHVM имеет семантику стирания типов, что означает, что мы на самом деле не знаем, что это за тип T, когда запускаем код. Однако часто было бы полезно сделать это, и мы рассмотрели, как добавить это, называемое «дженерики». Но это очень сложное, сложное изменение, и поэтому вы не должны ожидать этого в ближайшее время. Сожалею!

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]