Re: [RFC] Context Managers
| From: | Larry Garfield | Date: | Thu, 04 Dec 2025 16:46:18 +0000 |
| Subject: | Re: [RFC] Context Managers | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-129550@lists.php.net to get a copy of this message | ||
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