当使用 ReflectionParameter
类循环遍历原生 PHP 类 __construct()
参数时,我注意到文档中参数的类型提示不是与我使用类方法得到的结果相匹配。
例如 DateTime
对象:
$reflector = new ReflectionClass('DateTime');
$constructor = $reflector->getConstructor();
if ($constructorParams = $constructor->getParameters()) {
foreach ($constructorParams as $i => $param) {
var_dump($param->getClass());
}
}
这个输出:
null
null
但是according to the docs类描述是:
public DateTime::__construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )
$timezone
参数不应该有 DateTimeZone
的类型提示吗?还是该参数实际上没有类型提示,而文档只是告诉您应该传入什么?
此外,当输出名称时,它们也不同:var_dump($param->name)
输出:
time
object
但是,如果我要对 PDO
进行反射(reflection),名称的 var 转储会像文档中一样正确输出:
dsn
username
passwd
options
最佳答案
我一直fixed尝试使用相同的或遵循以下代码,
$reflector = new ReflectionClass('DateTime');
$constructor = $reflector->getConstructor();
if ($constructorParams = $constructor->getParameters()) {
foreach ($constructorParams as $i => $param) {
$name = $param->getClass() ? $param->getClass()->name : $param->name;
var_dump($name);
}
}
$reflector = new ReflectionClass('ArrayObject');
$constructor = $reflector->getConstructor();
if ($constructorParams = $constructor->getParameters()) {
foreach ($constructorParams as $i => $param) {
$name = $param->getClass() ? $param->getClass()->name : $param->name;
var_dump($name);
}
}
更多详情可以引用Fix , dateTime和 arrayObject
关于php - 如何获取原生 PHP 类构造函数的类型提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49416234/