PHP 大会日本 2024

ReflectionUnionType::getTypes

(PHP 8)

ReflectionUnionType::getTypes返回联合类型中包含的类型

描述

public ReflectionUnionType::getTypes(): array

返回联合类型中包含的类型的反射。

参数

此函数没有参数。

返回值

ReflectionType 对象的数组。

示例

示例 #1 ReflectionUnionType::getTypes() 示例

<?php
function someFunction(int|float $number) {}

$reflectionFunc = new ReflectionFunction('someFunction');
$reflectionParam = $reflectionFunc->getParameters()[0];

var_dump($reflectionParam->getType()->getTypes());

以上示例将输出类似以下内容

array(2) {
    [0] =>
    class ReflectionNamedType#4(0) {
    }
    [1] =>
    class ReflectionNamedType#5(0) {
    }
}

参见

添加注释

用户贡献的注释 2 条注释

baptiste at pillot dot fr
1 年前
排序

与人们预期相反,返回的 ReflectionType 对象数组的顺序与源代码中声明的类型的顺序不同。

- 类、接口、特性、可迭代(由 Traversable 替换)、ReflectionIntersectionType 对象、父类和自身:这些类型将首先返回,按照其声明的顺序。
- static 和所有内置类型(可迭代由数组替换)将紧随其后。它们始终将按照此顺序返回:static、callable、array、string、int、float、bool(或 false 或 true)、null。

请注意,当在联合类型中使用时,iterable 是 Traversable|array 的别名。ReflectionUnionType::getTypes 将返回这两个 ReflectionNamedType 对象,而不是一个名为 'iterable' 的对象。

示例
<?php
class PC {}
class
C extends PC {
function
f(): null|bool|float|int|parent|PC|string|iterable|(ReflectionClass&ReflectionProperty)|callable|static|self|C {}
}
echo
join(', ', array_map(
function(
$t) { return ($t instanceof ReflectionIntersectionType) ? '<intersection>' : $t->getName(); },
(new
ReflectionMethod('C', 'f'))->getReturnType()->getTypes()
)) .
"\n";
?>

将显示
parent, PC, Traversable, <intersection>, self, C, static, callable, array, string, int, float, bool, null

尝试一下: https://onlinephp.io/c/777c6
baptiste at pillot dot fr
1 年前
ReflectionUnionType::getTypes 只能返回 ReflectionNamedType 和/或 ReflectionIntersectionType 对象的数组。
To Top