Re: [RFC] Context Managers

From: Date: Mon, 30 Mar 2026 19:36:40 +0000
Subject: Re: [RFC] Context Managers
References: 1 2 3 4  Groups: php.internals 
Request: Send a blank email to internals+get-130502@lists.php.net to get a copy of this message
On 30 March 2026 19:48:05 BST, Larry Garfield <larry@garfieldtech.com> wrote: > ... break is the natural keyword for that, as it already means "stop this control > structure and go to the end of it." > >continue means "stop this iteration of a control structure and go to the next one." >But in this case, there is no next one. switch makes it an alias for break, for whatever reason >lost to history, but given that it now throws a warning that seems to now be considered a mistake, >so we don't see a reason to propagate that mistake. I agree with Tim that making break and continue define targets differently is a really bad idea. It's fine for a single "break;" or "continue;", but with PHP's count-based targeting, it would lead to cases like this: if ( definitely_right($loop_item) ) { $found_item = $loop_item; break 4; } elseif ( definitely_wrong($loop_item) ) { // targeting the same loop, but there's a couple of "using" or "switch" blocks in between continue 2; } If "break 2" terminates a "using" block, there are only two sane behaviours for "continue 2": - terminate that same block, as though it was a single-iteration loop - throw an Error, because the operation is not meaningful Looking back at the discussion of "continue targeting switch", I see I made the same point back then: https://externals.io/message/102393#102500 The consensus in that discussion was to *only* add a Warning, with no plan for further changes. It's not a deprecation, or a workaround for hard to change legacy behaviour; it's just a helpful hint to the developer that their code might have a mistake in it. Regards, Rowan Tommins [IMSoP]

« previous php.internals (#130502) next »