如果删除If/else函数中的"else",即使If语句返回false,$on_sal变量也会由于某种原因更改为"true"。
$mm = date('n');
$on_sale = false;
foreach ($services as $service) {
switch ($service) {
case 'Example Service':
if ($mm == 3 || $mm == 4) { #pretend this returns false
$service = '1% Off ' .$service;
$on_sale = true;
} else {
$on_sale = false; #<---- why must I do this?
}
break;
default:
$service;
$on_sale = false;
break;
}
#more code...
}
我期望的工作:
$mm = date('n');
$on_sale = false;
foreach ($services as $service) {
switch ($service) {
case 'Example Service':
if ($mm == 3 || $mm == 4) { #pretend this returns false
$service = '1% Off ' .$service;
$on_sale = true;
}
break;
default:
$service;
$on_sale = false;
break;
}
#more code...
}
编辑:
我错误地在foreach循环之外声明了我的$on_sall变量,所以对于每次迭代,$on_sal变量都没有"重置"。
错误:
$mm = date('n');
$on_sale = false;
foreach ($services as $service) {
...
好:
$mm = date('n');
foreach ($services as $service) {
$on_sale = false;
...
(这可能不是一个好答案,但您可能会学到一些关于交换机的知识。)
我不确定default
情况下的$service;
应该做什么,但是:
您通过(重新)移动break
语句:,使一个案例流血到下一个案例
switch (x) {
case a:
do A
// don't break
case b:
do B
break;
}
对于a
,这将使do A
与do B
"与",因为case a
不会停止。对于b
,这将仅为do B
。
在您的情况下:
switch ($service) {
case 'Example Service':
if ($mm == 3 || $mm == 4) { #pretend this returns false
$service = '1% Off ' .$service;
$on_sale = true;
break; // BREAK HERE
}
// DON'T BREAK HERE
default:
$service; // ??
$on_sale = false;
break;
}