Re: [RFC] Deprecate and remove continue targeting switch
| From: | Rowan Collins | Date: | Wed, 27 Jun 2018 17:43:39 +0000 |
| Subject: | Re: [RFC] Deprecate and remove continue targeting switch | ||
| References: | 1 2 3 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-102500@lists.php.net to get a copy of this message | ||
On 26 June 2018 at 19:27, Nikita Popov <nikita.ppv@gmail.com> wrote:
> a) In PHP "switch" is considered a looping structure, for this reason
> "break" and "continue" both apply to "switch", as aliases. For
> PHP, these
> are reasonable semantics, as PHP supports multi-level breaks. It would be
> very questionable if "break N" and "continue N" could refer to different
> loop structures just because there is a "switch" involved somewhere.
>
I think this point should be highlighted: this is not just an unfortunate
legacy decision, it would be *really bad* if "break 2;" sometimes referred
to a different loop from "continue 2;"
Other languages don't have that problem, because they don't have the
"continue N" syntax.
I'm +0.5 on Nikita's proposal to make this an error - it can't mean
anything other than "continue with this switch statement", but that doesn't
actually mean anything. The error is effectively saying "Can't 'continue' a
switch, because it's not really a loop."
Perhaps rather than deprecating and removing it, we should simply raise a
Warning on its use: "Use of 'continue' to terminate switch; did you mean
'break', or to continue a loop instead?" In other words, "we've done what
you asked, but we think it might not be what you meant".
Regards,
--
Rowan Collins
[IMSoP]