我正在尝试通过大量的按位测试,确切地说是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个只是为了发现它不起作用而谷歌没有发现任何关于此。
如果这不起作用是否有解决方案,或者我是否会降级为大量的if语句?
答案 0 :(得分:1)
不是不是这样。在您的示例中只会运行其中一个开关案例。一旦遇到break
,交换机处理就会结束。只有一个分支匹配。在PHP中,我认为(但您可能需要仔细检查)第一个匹配的案例将会运行。
有多个可能的匹配项,您需要使用一组if
语句(注意不要使用if ... elseif)
我会转换为
if($test & 1) {
// do stuff
}
if(test & 2) {
// do stuff
}
答案 1 :(得分:0)
首先,不建议以这种方式使用int
切换。这不是一个好习惯/不可读/不舒服。我会说它甚至不起作用,虽然我现在有疑问......根据版本和东西,我不太了解这些东西。
然后,为了回答你的问题,你只进入第一个匹配的情况......然后休息让你离开开关。但是,您可以省略中断,它将通过第二种情况。
无论如何,你应该更多地使用OOP来更好地描述你打算做什么,事情可能会变得更简单和清晰。