ReflectionParameter::getType

(PHP 7, PHP 8)

ReflectionParameter::getType获取参数的类型

说明

public ReflectionParameter::getType(): ?ReflectionType

获取参数的关联类型。

参数

此函数没有参数。

返回值

如果指定了参数类型,则返回一个 ReflectionType 对象;否则返回 null

示例

示例 #1 ReflectionParameter::getType() 在 PHP 7.1.0 中的使用

从 PHP 7.1.0 开始,ReflectionType::__toString() 已弃用,并且 ReflectionParameter::getType() 可能 返回 ReflectionNamedType 的实例。在这种情况下,可以使用 ReflectionNamedType() 来获取参数类型的名称。

<?php
function someFunction(int $param, $param2) {}

$reflectionFunc = new ReflectionFunction('someFunction');
$reflectionParams = $reflectionFunc->getParameters();
$reflectionType1 = $reflectionParams[0]->getType();
$reflectionType2 = $reflectionParams[1]->getType();

assert($reflectionType1 instanceof ReflectionNamedType);
echo
$reflectionType1->getName(), PHP_EOL;
var_dump($reflectionType2);
?>

上面的示例将输出

int
NULL

示例 #2 ReflectionParameter::getType() 在 PHP 7.1.0 之前的使用

<?php
function someFunction(int $param, $param2) {}

$reflectionFunc = new ReflectionFunction('someFunction');
$reflectionParams = $reflectionFunc->getParameters();
$reflectionType1 = $reflectionParams[0]->getType();
$reflectionType2 = $reflectionParams[1]->getType();

echo
$reflectionType1, PHP_EOL;
var_dump($reflectionType2);
?>

在 PHP 7.0 中运行上面示例的输出

int
NULL

示例 #3 ReflectionParameter::getType() 在 PHP 8.0.0 及更高版本中的使用

从 PHP 8.0.0 开始,此方法可能返回 ReflectionNamedType 实例或 ReflectionUnionType 实例。后者是前者的集合。为了分析类型,通常将类型规范化为一个 ReflectionNamedType 对象数组会很方便。以下函数将返回一个包含 0 个或更多 ReflectionNamedType 实例的数组。

<?php
function getAllTypes(ReflectionParameter $reflectionParameter): array
{
$reflectionType = $reflectionParameter->getType();

if (!
$reflectionType) return [];

return
$reflectionType instanceof ReflectionUnionType
? $reflectionType->getTypes()
: [
$reflectionType];
}
?>

参见

添加说明

用户贡献说明 1 条说明

Will Beaumont
3 年前
从 7.1 开始,如果找到了参数类型,则此方法将返回 ReflectionNamedType 的实例 (https://php.net/manual/en/class.reflectionnamedtype.php),它是 ReflectionType 的子类。
To Top