1
我正在HHVM中探索Hack,而且我正在使用泛型。我有以下的基本信息庫:Php在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"
}
}
然後我遍歷參數和呼叫: $參數 - >的getClass( )
其中返回null。
是否有可能在運行時使用反射來獲取T的類型?如果是的話,我會怎麼做?
感謝您的回答。我有一個後續。一般來說,黑客泛型似乎不起作用。請看這個要點:https://gist.github.com/leftyhitchens/03bf07f5566125c9ce39我錯過了什麼嗎?或者這是一個已知的錯誤? – Thomas 2014-10-16 15:51:38
這實際上會是一個語法錯誤 - 確保你正在運行強制執行很多語言的類型檢查器。 (HHVM的最新版本也會告訴你是否不這樣做。)信息:http://docs.hhvm.com/manual/en/install.hack.bootstrapping.php – 2014-10-16 16:28:47