PHP Conference Japan 2024

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
4 年前
从 7.1 开始,如果找到参数类型,则此方法返回 ReflectionNamedType 的实例 (https://php.net/manual/en/class.reflectionnamedtype.php),它是 ReflectionType 的子类。
To Top