切换语句异常行为

时间:2017-09-07 07:26:37

标签: php

echo get_option('bp-username-field');和echo get_option('bp-email-field');分别输出checked0。但是使用这个代码,两个案例都在运行。即来自用户名的hello和来自电子邮件的hello都会被发送。

switch("checked")
{
   case  get_option('bp-username-field'):
                echo 'hello from username';

   case  get_option('bp-email-field'):

                echo 'hello from email';
           ...

}

如果我更改switch("0"),它只会通过电子邮件回复你好。此外,swith(0)两个案例都在运行。这是什么行为?

4 个答案:

答案 0 :(得分:2)

您必须在案例后添加break。如果不是所有情况都会被执行。这是switch语句的正常行为

switch("checked")
{
   case  get_option('bp-username-field'):
                echo 'hello from username';
                break;
   case  get_option('bp-email-field'):

                echo 'hello from email';
           ...

}

答案 1 :(得分:1)

您可能遗漏了break

switch("checked")
{
   case  get_option('bp-username-field'):
                echo 'hello from username';
                break;

   case  get_option('bp-email-field'):

                echo 'hello from email';
                break;
           ...

}

当第一个案例被执行时,你需要打破开关。您需要引入break来中断所选案例之后的其他案例的执行。

switch(0)被调用时,它是最后一种情况(截至此处),因此它不会在第二种情况之前执行该操作。

答案 2 :(得分:1)

开关/外壳做比较松散。这意味着"checked" == 0true。你想要做的是:

switch(true)
{
   case  get_option('bp-username-field') === "checked":
                echo 'hello from username';

   case  get_option('bp-email-field') === "checked":

                echo 'hello from email';
           ...
}

但是在switch语句中,条件仅计算一次,并将结果与​​每个case语句进行比较。这意味着在第一个case被评估为true之后,所有其他case将被执行,直到切换结束。你真正想要的是什么:

if (get_option('bp-username-field') === "checked") {
    echo 'hello from username';
}

if (get_option('bp-email-field') === "checked") {
    echo 'hello from email';
}

答案 3 :(得分:-1)

因为你的陈述是错的; 你应该将变量里面的变量(变量)与所有这些情况进行比较。例如。

$favcolor = "red";

switch ($favcolor) {
    case "red":
        echo "Your favorite color is red!";
        break;
    case "blue":
        echo "Your favorite color is blue!";
        break;
    case "green":
        echo "Your favorite color is green!";
        break;
    default:
        echo "Your favorite color is neither red, blue, nor green!";
}