ReflectionType for iterable / PHP 8.2
| From: | Benjamin Morel | Date: | Wed, 02 Nov 2022 17:46:15 +0000 |
| Subject: | ReflectionType for iterable / PHP 8.2 | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-118939@lists.php.net to get a copy of this message | ||
Hi internals,
It just came to my attention that there is a change of behaviour between
PHP 8.1 and 8.2 in the way iterable is decomposed, or not, into
Traversable|array when reflected:
```
function foo(): iterable {}
function bar(): stdClass|iterable {}
echo (new ReflectionFunction('foo'))->getReturnType(), PHP_EOL;
echo (new ReflectionFunction('bar'))->getReturnType(), PHP_EOL;
```
Output on PHP 8.1:
```
iterable
stdClass|iterable
```
Output on PHP 8.2:
```
iterable
stdClass|Traversable|array
```
Is this expected behaviour? Or should I file a bug? I'm particularly
surprised that it behaves this way on PHP 8.2 only in the presence of union
types.
Thank you,
Benjamin