Re: [RFC] Context Managers
| From: | Dmitry Derepko | Date: | Tue, 16 Dec 2025 05:55:39 +0000 |
| Subject: | Re: [RFC] Context Managers | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-129613@lists.php.net to get a copy of this message | ||
> On Dec 16, 2025, at 1:19 AM, Larry Garfield <larry@garfieldtech.com> wrote:
>
> On Thu, Dec 4, 2025, at 10:46 AM, Larry Garfield wrote:
>>> On Tue, Nov 4, 2025, at 2:13 PM, Larry Garfield wrote:
>>> Arnaud and I would like to present another RFC for consideration:
>>> Context Managers.
>>>
>>> https://wiki.php.net/rfc/context-managers
>>>
>>> You'll probably note that is very similar to the recent proposal from
>>> Tim and Seifeddine. Both proposals grew out of casual discussion
>>> several months ago; I don't believe either team was aware that the
>>> other was also actively working on such a proposal, so we now have two.
>>> C'est la vie. :-)
>>>
>>> Naturally, Arnaud and I feel that our approach is the better one. In
>>> particular, as Arnaud noted in an earlier reply, __destruct() is
>>> unreliable if timing matters. It also does not allow differentiating
>>> between a success or failure exit condition, which for many use cases
>>> is absolutely mandatory (as shown in the examples in the context
>>> manager RFC).
>>>
>>> The Context Manager proposal is a near direct port of Python's
>>> approach, which is generally very well thought-out. However, there are
>>> a few open questions as listed in the RFC that we are seeking feedback
>>> on.
>>>
>>> Discuss. :-)
>>
>> More updates to Context Managers:
>>
>> * We have added "masking" for the context variable, using essentially
>> the same technique as the block scope RFC.
>> * We have added support for
try using, as a shorthand for
>> when you
>> want to wrap a try-catch-finally around a using statement anyway.
>>
>> More details of both are in the RFC.
>>
>> As no one seems to have a strong opinion on continue, we
>> will most
>> likely proceed with the current approach of matching switch
>> behavior.
>>
>> There doesn't seem to be much interest in making using
>> an expression,
>> which I find unfortunate, but that means we'll probably drop that.
>> Fortunately it is probably possible to change in the future if the need
>> arises (the way throw was changed).
>>
>> --Larry Garfield
>
> 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.
> }
>
> --Larry Garfield
I’d ask you to get back to “use” keyword, despite of it’s in use in Laravel or somewhere
else.
As a developer I cannot even imagine what “use” could mean in web frameworks context, I hope it
could have a better name and at the same time we can advise to use namespaces if you don’t want to
get something broken after upgrading language.
Just my 5 cents.
--
Best regards,
Dmitrii Derepko.
@xepozz