Hello Internals,

I recently found out (after 15 years of being a PHP developer) that PHP allows 
using a semicolon rather than a colon after case statements. [1] I.e.:

    switch ($value) {
        case 'foo';
        case 'bar':
                case 'baz';
            echo 'foo, bar, or baz';
            break;
        default;
            echo 'Other';
    }

Apparently this syntax has been allowed since at least the PHP 4 days, but very 
few developers know about it.

I ran a script on the top 1000 Composer packages to gauge usage, and out of 
35,777 total case statements, only 15 in two packages used the alternate 
syntax. All were accidental typos (randomly mixed in with statements using the 
normal syntax), and I opened pull requests to fix both (the first has already 
been merged):

- https://github.com/reactphp/promise/pull/264
- https://www.drupal.org/project/drupal/issues/3486526

Would it be worthwhile for me to write an RFC to propose deprecating the 
alternate switch case syntax in PHP 8.5?

The main reason for deprecation/removal it is that it causes confusion. A 
developer may think the alternate syntax behaves differently in some way from a 
regular case statement (e.g. preventing fallthrough or something), when it 
actually does not.

Best regards,
Theodore

Note: The normal case syntax has been part of the PSR-2 coding style since 
2012, and PHP-CS-Fixer automatically fixes usages of the non-standard syntax 
when using the @PSR2 or newer @PER-CS rulesets.

[1]: https://github.com/php/php-src/issues/15258

Reply via email to