默认为switch语句中的第一个选项?

Jos*_*osh 15 php syntax switch-statement

我已经测试了这个并且工作正常,但看起来......很奇怪......对我而言.我是否应该担心这是非标准形式,将在PHP的未来版本中删除,或者它可能会停止工作?我总是有一个默认案例作为最后一个案例,从来没有作为第一个案例......

switch($kind)
{
    default:
        // The kind wasn't valid, set it to the default
        $kind = 'kind1';
        // and fall through:

    case 'kind1':
        // Do some stuff for kind 1 here
        break;

    case 'kind2':
        // do some stuff for kind2 here
        break;

    // [...]

    case 'kindn':
        // do some stuff for kindn here
        break;

}

// some more stuff that uses $kind here...
Run Code Online (Sandbox Code Playgroud)

(如果不明显我正在尝试做的是确保$ kind是有效的,因此默认:case.但是交换机也执行一些操作,然后在切换后使用$ kind.这就是为什么默认:落到第一个案例,并设置$ kind)

建议?这是正常/有效的语法吗?

Pau*_*xon 22

这是一种不同寻常的习语,当你阅读它时会引起一点停顿,这是一个"嗯?"的时刻.它有效,但大多数人可能希望在最后找到默认情况:

switch($kind)
{
    case 'kind2':
        // do some stuff for kind2 here
        break;

    // [...]

    case 'kindn':
        // do some stuff for kindn here
        break;

    case 'kind1':
    default: 
        // Assume kind1
        $kind = 'kind1';

        break;

}
Run Code Online (Sandbox Code Playgroud)

  • 好的,我接受了.我需要:案例'kind1':默认:$ kind ='kind1'; (2认同)

小智 10

如果有人通过谷歌找到这个页面,我做了:

我和Josh想知道同样的事情 - 所以...有一件事是标准,我认为我们都应该更加努力地坚持,但另一件事是黑客攻击(在:利用 - 每种可能性的方式).

虽然它很丑/很奇怪/不正常 - 这是可能的,恕我直言可能在一些罕见的情况下有用......

考虑以下:

$color = "greenish";
//$color = "green";

switch($color) {
    default:
        echo "no colors were selected so the color is: ";
    case "red":
        echo "red<br />\n";
        break;
    case "blue":
        echo "blue<br />\n";
        break;
    case "green":
        echo "green<br />\n";
        break;
}
Run Code Online (Sandbox Code Playgroud)

如果$color = "greenish";代码将打印

没有选择颜色,因此颜色为红色

如果$color = "green";或任何其他定义的情况,它只会打印颜色.

它知道这不是最好的例子,但你明白了;)希望它对某人有所帮助.


Fra*_*kie 5

这就是我可能会做的......它很容易养眼并保持功能。

switch($kind)
{
    default :
    case 'kind1': 
        $kind = "kind1";
        // Do stuff for kind 1 
        break;

    case 'kind2':
        // do stuff for kind2 
        break;

    case 'kindn':
        // do stuff for kindn 
        break;
}
Run Code Online (Sandbox Code Playgroud)


Lig*_*ica 5

出于同样的原因,它看起来很奇怪

else {
   echo "lol";
}
if (1 == 1) {
   echo "bbq";
}
Run Code Online (Sandbox Code Playgroud)

如果它是有效的话,看起来会很奇怪。如果仅仅因为这个原因我就会避免它。

此外,您知道,每次向某人展示代码时,您都必须解释说,将案例放在第一位default是故意的;这通常表明这不是一个好主意。

  • 我发誓我耸了耸肩。起初我不知道什么是更奇怪的,否则首先或 1==1...+1 只是让我去“wtf?” (2认同)