Dear Theodore and list,

I've been looking into the "Deprecate semicolon after case in switch statement" PHP 8.5 deprecation [1] with the aim of adding a sniff for this to the PHPCompatibility standard and I'm noticing an oddity for which I would like to clarify whether this is intentional or an oversight.

As demonstrated in the example code provided in the deprecation RFC, both switch `case` condition statements, as well as `default` statements, can be ended with a semicolon.

So when I first read the RFC, I interpreted the proposal to include both `case` as well as `default`, as, in my mind, `default` is just a special `case` in a switch.

However, the RFC explicitly only talked about deprecating the use of a semicolon after a `case` statement and the implementation has followed this to the letter. [2]

The net result of this, is that you can now have a `switch` statement with semicolons terminating `case` statements and `default` statements, where the former (`case`) will result in a deprecation notice, while the latter (`default`) will not. For an example, see [3]

This feels inconsistent to me and counter to the intention of the RFC, which is stated to be:

> Case statements followed by a semicolon can cause confusion, as a developer may think they behave differently in some way from regular case statements (e.g. preventing fallthrough), when they do not.

Which leaves me wondering what the reason was not to _also_ deprecate the use of a semicolon to terminate a `default` statement in a switch ? I can't find any discussion about this in the original mailing list thread [4].

Anyone would care to clarify ?

Smile,
Juliette

1: https://wiki.php.net/rfc/deprecations_php_8_5#deprecate_semicolon_after_case_in_switch_statement 2: https://github.com/php/php-src/commit/5f8d648af6ef4e29a3c7f2b2029d08466c12bc6f
3: https://3v4l.org/liFIK/rfc#vgit.master
4: https://externals.io/message/126000

Reply via email to