PHP:如何在 Switch 语句中对多个案例使用相同的逻辑

Sae*_*kar 3 php switch-statement

我有一个函数可以根据输入的值返回响应。代码是这样的

$a = 5;
switch ($a) {
    case 1: $b = 1;
    break;
    case 2 || 3 || 4: $b = 2;
    break;
    case 5: $b = 3;
    break;
}
return $b;
Run Code Online (Sandbox Code Playgroud)

这将返回值2而不是3在代码中可以清楚地看到的值。这是怎么发生的?

Qir*_*rel 10

您使用的案例错误。您不能||在案例中间使用2 或 3 或 4,但您可以一个接一个地列出多个案例,而无需break在它们之间使用 aa来执行相同的操作。

$a = 5;

switch ($a) {
    case 1: 
        $b = 1;
        break;
    case 2:
    case 3:
    case 4: 
        $b = 2;
        break;
    case 5: 
        $b = 3;
        break;
}

return $b;
Run Code Online (Sandbox Code Playgroud)

您的原始代码发生的情况是,您获得case 2 || 3 || 4了 的等价物case (2 || 3 || 4):,它变成了case true:。在||操作者进行比较的任2,3和4的真实性-这是所有非零值,所以表达式评估为真。

您还应该注意,$b$a不是 1、2、3、4 或 5 之一时,它是未定义的。因此,您应该default在 switch 语句中使用case,或者$b在 switch 之前声明。