Hi internals,

The match expression can be thought of as a much more concise/readable 
equivalent to chained ternary operators.
I'm proposing allowing matches in constant expressions when all parts of the 
match are constant expressions.

For example, these two class constants would have equivalent behaviors if match 
expressions were allowed in constant expressions.

```
class MyClass {
    const CONFIG_SETTING = (APP_ENVIRONMENT == 'dev' || APP_ENVIRONMENT == 
'stage') ? 'development-config' :
        (APP_ENVIRONMENT == 'prod' ? 'production-config' : null);

    const CONFIG_SETTING = match(APP_ENVIRONMENT) {
        'dev', 'stage' => 'development-config',
        'prod' => 'production-config',
        default => null,
    };
}
```

https://github.com/php/php-src/pull/5951 implements the main part of the change.

This is mostly for the sake of consistency, since match can be thought of as 
yet another control flow primitive that is more readable under some 
circumstances.

So I had some questions:
1. Should this target 8.0 or 8.1? I'm leaning towards 8.1 since the beta is 
already out.
2. Are there objections to doing this?
3. Should/shouldn't php enforce that the default arm exists for match *in 
constant expressions*
   (constant expressions can already throw errors when evaluated for various 
reasons, but UnhandledMatchError is new)

Thanks,
- Tyson
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to