ReflectionParameter::getClass

(PHP 5, PHP 7, PHP 8)

ReflectionParameter::getClass获取被反射参数的 ReflectionClass 对象,或者 null

警告

从 PHP 8.0.0 开始,此函数已弃用。强烈建议不要依赖此函数。

描述

public ReflectionParameter::getClass(): ?ReflectionClass

获取被反射参数的 ReflectionClass 对象,或者 null

从 PHP 8.0.0 开始,此函数已弃用,不再推荐使用。请改为使用 ReflectionParameter::getType() 获取参数的 ReflectionType,然后询问该对象以确定参数类型。

警告

此函数目前没有文档;只有其参数列表可用。

参数

此函数没有参数。

返回值

一个 ReflectionClass 对象,或者 null(如果未声明类型,或者声明的类型不是类或接口)。

示例

示例 #1 使用 ReflectionParameter

<?php
function foo(Exception $a) { }

$functionReflection = new ReflectionFunction('foo');
$parameters = $functionReflection->getParameters();
$aParameter = $parameters[0];

echo
$aParameter->getClass()->name;
?>

参见

添加注释

用户贡献注释 5 条注释

11
infernaz at gmail dot com
13 年前
该方法返回参数类型类的 ReflectionClass 对象,如果没有则返回 NULL。

<?php

class A {
function
b(B $c, array $d, $e) {
}
}
class
B {
}

$refl = new ReflectionClass('A');
$par = $refl->getMethod('b')->getParameters();

var_dump($par[0]->getClass()->getName()); // 输出 B
var_dump($par[1]->getClass()); // 注意数组类型输出 NULL
var_dump($par[2]->getClass()); // 输出 NULL

?>
10
tom at r dot je
12 年前
如果参数所需的类未定义,ReflectionParameter::getClass() 将导致致命错误(并触发 __autoload)。

有时仅知道类名而不需加载类非常有用。

这是一个简单的函数,它将仅检索类名而无需类存在

<?php
function getClassName(ReflectionParameter $param) {
preg_match('/\[\s\<\w+?>\s([\w]+)/s', $param->__toString(), $matches);
return isset(
$matches[1]) ? $matches[1] : null;
}
?>
6
Dylan
3 年前
对于 php 版本 >=8
ReflectionParamter::getType() 是替换弃用方法的推荐方法

- getClass()
例如:$name = $param->getType() && !$param->getType()->isBuiltin()
? new ReflectionClass($param->getType()->getName())
: null;

- isArray()
例如:$isArray = $param->getType() && $param->getType()->getName() === 'array';

- isCallable()
例如:$isCallable = $param->getType() && $param->getType()->getName() === 'callable';

此方法在 PHP 7.0 及更高版本中可用。
1
tarik at bitstore dot ru
3 年前
您可以使用此函数代替弃用函数

/**
* 获取参数类
* @param \ReflectionParameter $parameter
* @return \ReflectionClass|null
*/
private function getClass(\ReflectionParameter $parameter):?\ReflectionClass
{
$type = $parameter->getType();
if (!$type || $type->isBuiltin())
return NULL;

// 此行将触发自动加载器!
if(!class_exists($type->getName()))
return NULL;


return new \ReflectionClass($type->getName());
}
-4
richard dot t dot rohrig at gmail dot com
4 年前
有关如何将 getClass() 与 getConstructor() 结合使用以构建类的依赖关系的示例。

private function buildDependencies(ReflectionClass $reflection)
{
$constructor = $reflection->getConstructor();

if (!$constructor) {
return [];
}

$params = $constructor->getParameters();

return array_map(function ($param) {

$className = $param->getClass();

if (!$className) {
throw new Exception();
}

$className = $param->getClass()->getName();

return $this->make($className);
}, $params);
}
To Top