我想将相同的变量(或表达式)与许多不同的值进行比较,并根据它所等的值返回不同的值.我希望这样做inline or shorthand,if语句可能会这样做.
请参阅以下switch
声明:
switch($color_name) {
case 'red':
case 'blue':
$color_type = handlePrimaryColor($in);
break;
case 'yellow':
case 'cyan':
$color_type = handleSecondaryColor($in);
break;
case 'azure':
case 'violet':
$color_type = handleTertiaryColor($in);
break;
default:
$color_type = null;
break;
}
我不喜欢在每种情况下编写$color_type =并希望用更少的代码找到一种方法来做到这一点.
我可以用某种形式的速记语法来做到这一点.下面,我使用shorthand if
statement为变量首先被声明的位置赋值:
$color_type = $color_name == 'red' || $color_name == 'blue'
? handlePrimaryColor($color_name)
: ($color_name == 'yellow' || $color_name == 'cyan'
? handleSecondaryColor($color_name)
: ($color_name == 'azure' || $color_name == 'violet'
? handleTertiaryColor($color_name)
: null
)
);
此方法不需要在每个构造中声明变量,而是给我2个新问题:
>我现在必须为每种颜色写一个新的OR条件
>每组条件都增加了额外的嵌套水平
我的问题:是否有一种方法允许我使用行为类似于开关的简写语法直接为变量赋值?
如果没有,我会有兴趣了解为什么存在这种限制.
解决方法:
太多的工作.使用调度表.
$color_dispatch = Array(
'red' => 'handlePrimaryColor',
'blue' => 'handlePrimaryColor',
...
);
$color_type = null;
if (array_key_exists($color_name, $color_dispatch))
{
$color_type = $color_dispatch[$color_name]($in);
}