On mardi 29 mars 2022 15:33:41 CEST Thomas Nunninger wrote:
> Hi,
> 
> Am 29.03.22 um 14:34 schrieb Rowan Tommins:
> > 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.
> 
> While I liked the intention of Karoly, I did not like the proposed magic.
> 
> Would it be an idea (and possible) to extend the syntax somehow like:
> 
> $result = match ($value) {
>      instanceof MyObject => ...,
> 
>      >= 42 => ...,
> 
>      !== 5 => ...
> };
> 
> to be equivalent to:
> 
> $result = match (true) {
>      $value instanceof MyObject => ...,
>      $value >= 42 => ...,
>      $value !== 5 => ...
> };
> 
> 
> Regards
> Thomas

I like this.

The pattern matching RFC may also cover this:
https://wiki.php.net/rfc/pattern-matching

-- Arnaud

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to