> On Oct 17, 2019, at 11:14 PM, Bishop Bettini <bis...@php.net> wrote: > > +1. It's 100% opt-in. People can keep using implicit fall-through, their own > /* fallthrough */ comments, or the new token. There's virtually no overhead > in the compile phase and it doesn't mess with the jump table optimizations. > There's precedent for this desire in PHP static analyzers [1] as well as > other major projects: eg, the Linux Foundation just completed a 2 year > project to remove implicit fall-through in the Linux kernel [2] (*). > > That said, some questions:
Hi Bishop, Thank you for the questions. > Do you envision this token accepting an optional argument, as break does, to > fall-through multiple nesting levels? Eg: No. I had not envisioned anything more than a single statement that would indicate to PHP and other tools that a developer intends to _not_ use a break. What you suggest had not occurred to me, and is an interesting idea. But I think I would prefer — like Rowan Tommins argued — that we should keep it simple. Being able to fallthrough many levels would be an extra feature we can already accomplish in other, more explicit ways. I would rather focus on targeting a use-case we cannot currently address, i.e. for PHP itself and other tools to be able to flag lack of an explicit case exiting action. > What do you envision the result of indicating fall-through to no subsequent > case? Eg: > > <?php > switch ($x) { > case 1: fallthrough; > } > ?> Since it would have no effect that could be flagged or not flagged as a warning. It might be nice to allow it so that refactoring is less likely to result in a warning. > Would a "pragma" (of sorts) be a part of the concept? > > <?php declare(strict_break=1); > switch ($x) { > case 1: echo 'x1'; // ImplicitBreakError thrown here > case 2: echo 'x2'; > } > ?> Yes, but recent discussions on this list lamented the concern that we could end up with tens if not hundreds of pragmas, and I concur that would be no fun. So how we would indicate is an open question PHP should answer before adding a pragma for fallthrough. As an aside, I would be excited to see that discussion start in earnest. Also, I am sure you remember that Nikita proposed an idea loosely described as "Editions" and that might be the way to go. Imagine the following: <?php declare(edition=2020); switch ($x) { case 1: echo 'x1'; // ImplicitBreakError thrown here case 2: echo 'x2'; } Or another approach could just be version specific: <?php declare(strict[version]=php8); switch ($x) { case 1: echo 'x1'; // ImplicitBreakError thrown here case 2: echo 'x2'; } For these though, the devil would be in the details. -Mike