php - 如何获取原生 PHP 类构造函数的类型提示

标签 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 进行反射(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 , dateTimearrayObject

关于php - 如何获取原生 PHP 类构造函数的类型提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49416234/

相关文章:

javascript - CSS - 一个文件中的所有媒体查询?或加载单独的 CSS 文件?

c++ - 类与辅助例程 - C++

javascript - 使用 this 和 prototype 在 JavaScript 中定义类的方法有什么区别?

java - 空 .java 文件名是否有效?

go - 通过反射将 *struct 归零(不知道底层类型)并将指针重新分配给接口(interface)

.net - 如何循环遍历一个类的所有属性?

php 和 mysql 到 xml

php - 我通过 homebrew 安装 mcrypt ,但 phpmyadmin 仍然告诉我它丢失了

java - 如何动态新建嵌套结构?

php - 将选定的复选框下拉值发送到 Codeigniter 中的 MySQL 表