On Thu, Jun 14, 2018 at 4:35 AM, Nikita Popov <nikita....@gmail.com> wrote:

> I think if people want to use strict matching, they'll quite likely want to
> have it on all cases. Something like "strict switch ($expr) {}" or "switch
> strict ($expr) {}" or "switch (strict $expr) {}" or "switch ($expr) strict
> {}" or "switch ($expr) { strict; }" or whatever would be preferable in that
> case.
>
> Additionally, switch has the issue of fall-through behavior, which is
> somewhat unexpected and error prone to many people. It might make sense to
> introduce an entirely new "match" statement that conforms a bit more with
> how switch-like strictures are implemented nowadays. That is, something like
>
> match ($expr) {
>     "foo" => {...},
>     "bar" | "baz" => {...},
> }
>
> or similar. This might need some more design work to ensure forward
> compatibility with potential future algebraic datatypes etc.

I really like this idea. It's similar to the `match` control flow operator
in Rust: https://doc.rust-lang.org/book/second-edition/ch06-02-match.html.

One reason I almost never use the `switch` statement in PHP (besides the
lack of strict matching) is that it's so verbose. Having to put a `break`
keyword after every case to avoid fallthrough means that it almost always
requires less code to use `if` statements instead.

To avoid confusion with union types, I think I would prefer commas between
or conditions instead of a pipe character. Example:

```
match ($expr) {
  "foo", "bar" => {echo 'expr is "foo" or "bar"';},
  true => {echo 'expr is true';},
  1 => {echo 'expr is 1';},
  null => {echo 'expr is null';},
  false => {echo 'expr is false';},
  default => {echo 'expr is something else';},
}
```
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to