> 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

Reply via email to