【问题标题】:Switch with "mask" variable使用“掩码”变量切换
【发布时间】:2013-07-23 02:57:26
【问题描述】:

变量:

$mask = A | B | C;

我可以像这样使用 switch 来测试每个常量:

switch(true){
  case $mask & A:
   ...
  case $mask & B:
   ...
  case $mask & C:
   ...
}

我想知道是否有可能有一个更好的开关,例如:

switch($mask){
  case A:
   ...
  case B:
   ...
  case C:
   ...
}

我相信我需要用奇怪的 ~ 运算符来修改变量。但是怎么做?

【问题讨论】:

  • 这个你被 if/ifelses 卡住了 :(
  • 加上一个开关,它只会匹配一个条件......掩码通常定义多个条件。
  • 实际上它会工作,但开关会在第一场比赛后转储。
  • Switch 是实现位掩码计算的错误选择,除非每个都存在级联依赖性。请参阅stackoverflow.com/a/5319489/258674 应该如何完成。

标签: php switch-statement mask


【解决方案1】:

可以按照您的说法构建一个开关

<?php

define("A", 1);
define("B", 2);
define("C", 4);


$mask = B | C;

switch(true){
  case $mask & A:
    echo "A";
    break;
  case $mask & B:
    echo "B";
    break;
  case $mask & C:
    echo "C";
    break;
}
?>

但问题是开关只会触发第一个匹配条件。 因此,上面带有$mask = B | C; 的代码只会在您可能希望它回显 BC 时回显 B

所以简而言之,如果您希望行为是它只执行第一个匹配条件,那么您可以使用它,否则您将不得不执行一系列 ifs。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 2019-11-05
    • 2015-03-24
    相关资源
    最近更新 更多