php 反射 方法参数,ReflectionParamters--关于一个类方法参数的反射

继续我们上一节的话题,我们在使用ReflectionMethod的getParameters方法后,返回了一个 ReflectionParamters类的对象。

接下来看看这个类的具体内容:

e7f651a1c6b7b7856b35f0f022ebc9d5.png

官方这里解释的非常详细:

首先这个类的功能:  他获得了函数或方法参数的详细信息。

其次,这个类并没有构造函数,因为一个关于参数的反射类,必须满足在他是参数或者方法前提下,抛开这两个范围,参数将无从谈起。所以,ReflectionParamter类的构造是由ReflectionMethod调用返回后生成的,而且他为每一个参数都生成了一个ReflectionParamter对象,这样就能获得每个参数的详细信息了。至于另一种构造ReflectionParamter的方法是使用RefelctionFunction这个是关于普通函数的一个反射类,后面我们会详细讲解。

那知道怎么构造这个类,我们看看他内部有哪些方法?

38694c799fdc25b54711d3c0806dabc8.png

首先他实现了Reflector接口,这个接口之前遇到过,他也被ReflectionMethod类实现,那么在他本身的方法中,首先得实现这个接口的抽象方法。

ec7217e67458dc4b6fd01256aa54d656.png

除此之外是他的详细方法:

f8a855ff2d9e37fa684f19c6cd5554d1.png

更多的是关于参数的详细信息:如,获得参数名称,获得参数类型,检查是否有默认值等等。

老规矩,知道这些基本信息后开始使用它们做一些事情:

一、ReflectionParamter::getName(获得参数名称)

实例

class User

{

public     $username;

protected  $age;

private    $sex;

public function __construct($username, $age, $sex)

{

$this->username = $username;

$this->age = $age;

$this->sex = $sex;

}

public function getUsername()

{

return $this->username;

}

public function getAge()

{

return $this->age;

}

public function getSex()

{

return $this->sex;

}

}

# 为 User类创建ReflectionClass 类

$reflect = new ReflectionClass('User'); //参数可为包含类名的字符串 或者 类的对象

# 获取已反射的类的构造函数 没有参数 返回一个 ReflectionMethod 对象

$reflectMethodObj = $reflect->getConstructor();

# 获得构造函数的参数列表 [数组对象方式]

$params = $reflectMethodObj->getParameters();

# 遍历数组对象并调用对象中的一些方法

foreach($params as $param)

{

# 这里的param就是ReflectionParamter的对象

# 获得了每个参数的变量名

$paramName = $param->getName();

echo $paramName.'
';

}

?>

运行实例 »

这个例子展示了获得参数的参数名,那这个有什么用呢?我们在传参的时候是以数组形式传入,那数组有索引和关联数组,

索引比较好说,按着顺序排序后,一个萝卜了一个坑就可以绑定了,但是关联传参呢,和他绑定的是参数名,所以我们要获得参数的参数名。

二、ReflectionParamter::getClass(获得类型提示)

实例

class User

{

public     $username;

protected  $age;

private    $sex;

public function __construct(Exception $class, array $array, Reflector $interface, callable $callback)

{

}

public function getUsername()

{

return $this->username;

}

public function getAge()

{

return $this->age;

}

public function getSex()

{

return $this->sex;

}

}

# 为 User类创建ReflectionClass 类

$reflect = new ReflectionClass('User'); //参数可为包含类名的字符串 或者 类的对象

# 获取已反射的类的构造函数 没有参数 返回一个 ReflectionMethod 对象

$reflectMethodObj = $reflect->getConstructor();

# 获得构造函数的参数列表 [数组对象方式]

$params = $reflectMethodObj->getParameters();

# 遍历数组对象并调用对象中的一些方法

foreach($params as $param)

{

# 这里的param就是ReflectionParamter的对象

# 获得了每个参数类型提示类 (只获取提示类型为类的参数) 其余的返回NULL

$class = $param->getClass();

echo '

';

var_dump($class);

}

?>

运行实例 »

PHP 5 起可以使用类型约束。函数的参数可以指定必须为对象(在函数原型里面指定类的名字),接口,数组(PHP 5.1 起)或者 callable(PHP 5.4 起)。不过如果使用 NULL 作为参数的默认值,那么在调用函数的时候依然可以使用 NULL 作为实参。而getClass方法可获取类型提示中的关于类的约束,按返回具有详细的命名空间的类名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值