从 7.1 开始,如果找到了参数类型,则此方法将返回 ReflectionNamedType 的实例 (https://php.net/manual/en/class.reflectionnamedtype.php),它是 ReflectionType 的子类。
(PHP 7, PHP 8)
ReflectionParameter::getType — 获取参数的类型
此函数没有参数。
如果指定了参数类型,则返回一个 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];
}
?>
从 7.1 开始,如果找到了参数类型,则此方法将返回 ReflectionNamedType 的实例 (https://php.net/manual/en/class.reflectionnamedtype.php),它是 ReflectionType 的子类。