Re: [RFC] Context Managers
| From: | Ben Ramsey | Date: | Tue, 16 Dec 2025 04:08:33 +0000 |
| Subject: | Re: [RFC] Context Managers | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-129612@lists.php.net to get a copy of this message | ||
> On Dec 15, 2025, at 18:21, Deleu <deleugyn@gmail.com> wrote:
>
> On Mon, 15 Dec 2025 at 20:01 Ben Ramsey <ben@benramsey.com> wrote:
>>>
>>>
>>> Since the only feedback on what to use for "as" was that => makes sense,
>>> we have changed the RFC to use => instead. So the new syntax is
>>>
>>> using (new CM() => $cVar) {
>>> // Do stuff here.
>>> }
>>>
>>> Going to be controversial here, but this is confusing, because it operates in the exact
>>> opposite of every other usage of => we have. With associative arrays, the left is assigned to the
>>> expression on the right; with arrow functions, the return value is the expression on the right; with
>>> match, the expression on the right is returned.
>>>
>>> This is going to be easy to get wrong.
>>
>>
>> I agree with Matthew.
>>
>> I think it makes more sense to reverse them, like this:
>>
>> using ($cVar => new CM()) {
>> // Do stuff here.
>> }
>>
>> I think it’s still clear what this is doing, when reading it.
>>
>> Cheers,
>> Ben
>
> I also agree with Matthew but the reversed proposed here looks very very awkward to me. I think
> the most natural thing is the “as” but I may have missed the discussion on why it had to be
> changed.
>
> Thinking of foreach ($array as $value), an item from the array (left) is assigned to $value
> (right). That seems symmetrical to using (new Manager as $manager) where the instance (left) is
> assigned to the variable (right). Also when using aliases on the top of the file “use Foo as
> Bar;” as is also assigning the left to the right.
This argument makes sense to me (i.e., using
as instead of =>).
I’ll go back through the thread to find the arguments against using as, to understand
why it changed to =>.
Cheers,
Ben