2024-02-14
Editor note: This behaviour is due to BC concerns with PHP 7, and will likely be fixed in PHP 9.
PHP 8.3
interface AnyType {}
interface Type2 {}
function test (AnyType|null $param) {}
The ReflectionParameter will return ReflectionNamedType, NOT ReflectionUnionType (null is ignored basically).
However, function test (AnyType|Type2|null $param) {}
will return ReflectionUnionType with 3 types, NOT 2 (null is not ignored this time).
To me, this is just wrong and logical error in PHP.