Re: [RFC] Context Managers
| From: | Rowan Tommins [IMSoP] | 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]