Re: Empty subject in match and switch constructions
| From: | Claude Pache | 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