Re: semicolon terminator for switch cases
| From: | Christoph M. Becker | Date: | Thu, 26 Mar 2020 22:38:43 +0000 |
| Subject: | Re: semicolon terminator for switch cases | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-109365@lists.php.net to get a copy of this message | ||
On 26.03.2020 at 23:04, Claude Pache wrote:
>> Le 26 mars 2020 à 19:37, Ilija Tovilo <ilija.tovilo@me.com> a écrit :
>>
>> What's the reasoning behind this? I find it weird an inconsistent.
>
> This is a manifestly a leftover of an old syntax. Take a look at the PHP/FI 2 manual:
>
> Language constructs:
> https://www.php.net/manual/phpfi2.php#lang
> <https://www.php.net/manual/phpfi2.php#lang>
>
>
> ```
> <?
> if($a==5 && $b!=0 );
> $c = 100 + $a / $b;
> endif;
> >
> ```
>
> and, in particular, switch construct:
> https://www.php.net/manual/phpfi2.php#switch
> <https://www.php.net/manual/phpfi2.php#switch>
>
> ```
> <?
> $a=0;
> switch($a) {
> case 1;
> echo "a is 1";
> break;
> case "hello";
> echo "a is hello";
> break;
> default;
> echo "a is unknown";
> break;
> }
> >
> ```
>
> Note that every line of code, including
if (...); and
> case...;, is consistently terminated by a semicolon.
>
> In a subsequent major version, the syntax was modified, and you would use a colon instead of a
> semicolon in a number of places, as you can write today:
>
> ```
> <?php
> if ($a==5 && $b!=0):
> $c = 100 + $a / $b;
> endif;
> >
> ```
>
> Although the old if (true); syntax has been removed (probably
> because of ambiguity or difficulty of parsing), the old case 1;
> syntax could be left without issue.
Interesting! Thanks for digging this out. :)
--
Christoph M. Becker