On Tue, Mar 29, 2022 at 3:47 AM Bruce Weirdan <[email protected]> wrote:
>
> On Mon, Mar 28, 2022 at 7:56 PM Karoly Negyesi <[email protected]> wrote:
> > match ($object) {
> > Someinterface => 'foo',
> > AnotherInterface => 'bar',
> > }
> >
> > this can not clash with any existing code as using identifiers like this
> > are a syntax error currently.
>
> That's valid code actually, see https://3v4l.org/BEcE4
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: https://www.php.net/unsub.php
>
It can be modified to produce ambiguous code however:
const SomeInterface = 1;
const AnotherInterface = 2;
interface SomeInterface {}
interface OtherInterface {}
$object = new class implements SomeInterface {};
var_dump(
match (true) {
$object instanceof SomeInterface => 'foo',
$object instanceof AnotherInterface => 'bar',
}
);
We can see that `SomeInterface` will resolve the interface and not the
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.
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php