On 29/03/2022 11:59, Robert Landers wrote:
$object instanceof AnotherInterface => 'bar',
We can see that `SomeInterface` will resolve the interface and not the
constant.
Yeah, the instanceof operator is magic in that regard - it has a special
parsing rule to consume the next token and avoid it being evaluated as a
constant.
I think what they are proposing is that when the match is an object,
and the branches are class/interface/etc names, it should just do an
`instanceof` operation instead of a value-equals operation.
That wouldn't work, because the type of value passed to match() can vary
at run-time, but you'd need to compile the expression one way or the other.
If it did work, it would be extremely confusing:
function example(string|object $input) {
return match($input) {
SomeClass => 'found class',
SOME_CONSTANT => 'found constant',
};
}
var_dump( example(new SomeClass) );
var_dump( example(SOME_CONSTANT) );
Do both of those matches succeed? What if I set `const SomeClass =
'hello';`?
So unfortunately we need some extra syntax to say that something should
be an instanceof check, and therefore a class name.
Regards,
--
Rowan Tommins
[IMSoP]
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php