echo get_option('bp-username-field');
和echo get_option('bp-email-field');
分别输出checked
和0
。但是使用这个代码,两个案例都在运行。即来自用户名的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)
两个案例都在运行。这是什么行为?
答案 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" == 0
是true
。你想要做的是:
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!";
}