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