使用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
进行反思,那么名称的var转储输出就像在文档中一样:
dsn
username
passwd
options
答案 0 :(得分:0)
我一直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