Sorting :Contrary to what one might expect, the returned array of ReflectionType objects will not be sorted in the same order than the types declared into the source code.- Classes, interfaces, traits, iterable (replaced by Traversable), ReflectionIntersectionType objects, parent and self: these types will be returned first, in the order in which they were declared.- static and all built-in types (iterable replaced by array) will come next. They will always be returned in this order: static, callable, array, string, int, float, bool (or false or true), null.Notice that when used into an union type, iterable is an alias for Traversable|array. ReflectionUnionType::getTypes will return these both ReflectionNamedType objects, instead of a single one named 'iterable'.Example :<?phpclass 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";?>Will display :parent, PC, Traversable, <intersection>, self, C, static, callable, array, string, int, float, bool, nullTry it: https://onlinephp.io/c/777c6