PHP8:如何在match表达式中复用关联数组避免重复代码?
解决方案
方法一:直接用数组访问替代match(最简洁)
既然已经定义了关联数组,完全可以跳过match,直接通过数组键获取值,搭配??运算符处理默认值,彻底避免代码冗余:
$rank = [ '1' => 'Beginner', '2' => 'Intermediate', '3' => 'Expert', '4' => 'Super Pro', ]; // 获取用户等级文本 $userRankText = $rank[$user->rank] ?? 'N/A'; // 其他业务场景复用数组 foreach ($rank as $key => $label) { // 业务逻辑 }
方法二:如果一定要用match表达式(PHP 8.1+)
PHP 8.1及以上支持在match分支中使用参数展开(...),结合array_keys匹配所有数组键,再返回对应的值:
$rank = [ '1' => 'Beginner', '2' => 'Intermediate', '3' => 'Expert', '4' => 'Super Pro', ]; $userRankText = match ($user->rank) { ...array_keys($rank) => $rank[$user->rank], default => 'N/A', }; // 复用数组做其他操作 foreach ($rank as $each_rank) { // 业务逻辑 }
注意:这种写法要求PHP版本≥8.1,依赖参数展开语法。
方法三:封装成常量/类常量(适合全局复用)
如果这个等级数组需要在多个业务模块使用,建议封装成常量或类常量,进一步提升复用性:
// 定义全局常量 define('USER_RANKS', [ '1' => 'Beginner', '2' => 'Intermediate', '3' => 'Expert', '4' => 'Super Pro', ]); // 或者类常量(更规范,适合项目架构) class UserConstants { public const RANKS = [ '1' => 'Beginner', '2' => 'Intermediate', '3' => 'Expert', '4' => 'Super Pro', ]; } // 使用类常量示例 $userRankText = UserConstants::RANKS[$user->rank] ?? 'N/A'; foreach (UserConstants::RANKS as $rank) { // 业务逻辑 }
内容的提问来源于stack exchange,提问作者Syamsoul Azrien
相关产品推荐
相关产品推荐

