0

我正在尝试进行大量按位测试,确切地说是 32 个,其中可能有多个匹配项。我能想到的唯一可行的方法是使用一长串 if 语句,例如

$test = 3;
if(($test & 1) == 1) {
    do something...
}
if(($test & 2) == 2) {
    do something else...
}

我正在考虑减少代码的另一种可能性,虽然可能不是很多,但可能是 switch 语句。也就是说,我什至不确定我的想法是否会奏效:

$test = 3;
switch($test) {
    case ((1 & $test) == 1):
        do something...
        break;
    case ((2 & $test) == 2):
        //Will this run?
        do something else...
        break;
}

break结束开关吗?或者切换是否会继续,并且每个案例都会运行按位运算返回 true?

我问是因为我的实际程序将有 32 个不同的测试,我不想写所有 32 个只是为了发现它不起作用而 Google 没有在这方面提供任何信息。

如果这不起作用,是否有解决方案可以解决,还是我被降级为大量 if 语句?

4

2 回答 2

1

不,事实并非如此。在您的示例中,只有一个 switch 案例将运行。一旦break遇到切换处理就结束。只有一个分支会匹配。我认为在 PHP 中(但您可能需要仔细检查)第一个匹配案例将运行。

对于多个可能的匹配项,您需要使用一组if语句(注意不要使用 if...elseif)

我会转换为

if($test & 1) {
    // do stuff
}

if(test & 2) {
    // do stuff
}
于 2013-09-20T15:55:56.733 回答
0

首先,int不建议以这种方式使用 switch。这不是一个好习惯/不是很可读/不舒服。我会说它甚至不起作用,尽管我现在有疑问......取决于版本和东西,我对这些东西知之甚少。

然后,要回答你的问题,你只需要进入第一个匹配的案例......然后break会让你离开 switch。但是,您可以省略中断,它将通过第二种情况。

无论如何,您应该更多地使用 OOP 来更好地描述您打算做什么,事情可能会变得更加简单和清晰。

于 2013-09-20T16:01:40.030 回答