On Mon, Dec 15, 2025, 3:19 PM Larry Garfield <[email protected]> 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. > } > 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. -- Matthew Weier O'Phinney [email protected] https://mwop.net/ he/him >
