Re: Empty subject in match and switch constructions

From: Date: Tue, 04 Feb 2025 08:44:27 +0000
Subject: Re: Empty subject in match and switch constructions
References: 1 2 3 4  Groups: php.internals 
Request: Send a blank email to internals+get-126280@lists.php.net to get a copy of this message
> Le 4 févr. 2025 à 08:43, Dmitry Derepko <xepozzd@gmail.com> a écrit : > > Hi, Larry! > >> On Feb 3, 2025, at 10:01 AM, Larry Garfield <larry@garfieldtech.com> wrote: >> >> On Sun, Feb 2, 2025, at 7:40 AM, Ilija Tovilo wrote: >>> Hi Dmitrii >>> >>> On Sun, Feb 2, 2025 at 1:05 PM Dmitry Derepko <xepozzd@gmail.com> wrote: >>> >>> https://wiki.php.net/rfc/short-match >>> https://externals.io/message/112496 >> >> Hi, author of that RFC here. Although there seemed to be interest for it in the initial >> match() discussion, the stand-alone follow up was met with a giant "meh", which is why I >> didn't pursue it further. I would still be in favor of it, though, if it could get through >> internals. I'm happy to have someone pick it up and run with it, or collaborate on rebooting >> that RFC. (I'm pretty sure the patch for it actually worked, at least it did at the time.) >> >> --Larry Garfield > > > It looks funny that I’m following in your steps with the RFC’s didn’t go through 😃 > > By the way, I’ve implemented empty match subject in a bit different way: > https://github.com/php/php-src/pull/17692 > > About the RFC. What’s the way to re-activate it? > Will you re-activate it? > Do I need to create a new one referencing to this one? > Can you share rights to edit the RFC and we can push it further together? Hi, One issue to resolve is how to interpret: ```php $x = match { preg_match('/a/', 'a') => "will it be matched ..." , default => "... or not?" }; ``` knowing that preg_match(...) never returns true, but one of 0, 1 or false. More generally, how to deal with truthy-but-not-true values. I see three options: (a) check for strict equality with true (i.e. make match {} equivalent to match(true) {}). The preg_match(...)` branch will never be taken; (b) check for truthy values. The preg_match(...) branch will be taken if the condition evaluates to 1; (c) mandate a boolean: The preg_match(...) branch will throw a runtime error if the condition evaluates to 0 or 1; Personnally, I am against option (a) as it is confusing and would be a source of bugs. —Claude

« previous php.internals (#126280) next »