排序
与预期相反,返回的 ReflectionType 对象数组不会按照在源代码中声明的类型的顺序排序。
- 类、接口、特征、可迭代(被 Traversable 替换)、ReflectionIntersectionType 对象、父类和自身:这些类型将首先返回,按照它们被声明的顺序。
- 静态和所有内置类型(可迭代被数组替换)将在接下来返回。它们将始终按照以下顺序返回:静态、可调用、数组、字符串、整数、浮点数、布尔值(或 false 或 true)、null。
请注意,在联合类型中使用时,可迭代是 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