Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否存在速记开关语句(在PHP中)?_Php_Switch Statement_Shorthand - Fatal编程技术网

是否存在速记开关语句(在PHP中)?

是否存在速记开关语句(在PHP中)?,php,switch-statement,shorthand,Php,Switch Statement,Shorthand,我想将同一个变量(或表达式)与许多不同的值进行比较,并根据它等于的值返回不同的值。我想用if语句尽可能做到这一点 采取以下声明: switch($color_name) { case 'red': case 'blue': $color_type = handlePrimaryColor($in); break; case 'yellow': case 'cyan': $color_type = handleSeco

我想将同一个变量(或表达式)与许多不同的值进行比较,并根据它等于的值返回不同的值。我想用
if
语句尽可能做到这一点

采取以下声明:

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\u type=
,我希望找到一种用更少的代码来实现这一点的方法

我可以用某种形式的速记语法。下面,我使用a在第一次声明变量的同一位置为变量赋值:

$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
        )
    );
此方法不需要在每个构造中声明变量,但会给我带来两个新问题:

  • 我现在必须为每种颜色编写一个新的
    条件
  • 每组条件都会添加一个额外的嵌套级别
我的问题是:有没有一种方法可以让我使用类似开关的速记语法直接给变量赋值


如果没有,我会有兴趣了解为什么存在这种限制。

工作太多了。使用调度表

$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);
}

我打赌你的同事都爱你为什么?我只是想知道是否有可能把我的switch语句翻译成速记版本。事实上,我不会让我的同事看到多级嵌套的内联if语句。问题中我的代码的主题和内容只是一个例子。这只是一个轻松的评论-我以前在野外遇到过类似的代码,这是一次令人沮丧的经历!嘿,轻描淡写地说,我只是担心有人会认为我产生了这样的代码,而我的问题的目的是避免它:)很好的方法,但我认为你想要
isset($color\u dispatch[$color\u name])
数组密钥存在
。检查键而不是值。@abracadver:确实如此。修正了。很抱歉,但我的问题的目的是找出是否存在这样的方法(如存在语句时使用速记),或者了解为什么这样的方法不存在。我不是在寻找替代方案,只是好奇而已。它不存在,因为每个人都使用调度表。