Переключатель с переменной "маска"


Переменная:

$mask = A | B | C;

И я могу использовать переключатель для проверки каждой константы следующим образом:

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

Мне было интересно, можно ли иметь более приятный переключатель, например:

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

Я считаю, что мне нужно как-то изменить переменную с помощью странного оператора ~. но как?

Author: Alex, 2013-07-22

1 answers

Можно структурировать переключатель так, как вы указали

<?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; будет повторять B только тогда, когда вы, вероятно, захотите, чтобы он повторял BC

Короче говоря, если вы хотите, чтобы поведение было таким, чтобы оно выполняло только первое условие соответствия, то вы можете использовать это, иначе вам придется выполнить ряд "если".

 1
Author: Orangepill, 2013-07-22 18:57:26