排序
与人们预期相反,返回的 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