如何获取本机PHP类构造函数的类型提示

时间:2018-03-21 20:48:40

标签: php oop reflection

使用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

1 个答案:

答案 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);
        }
    }

有关详细信息,请参阅FixdateTimearrayObject