проблема с переключателем php - PullRequest
4 голосов
/ 05 сентября 2010

Я пытаюсь сказать $level > -100 && $level < 100

$level  = 0;

                switch($level){                                                                                       

                case $level > -100:                                                                                   
                break;
                case $level <  100:                                                                                   
                break;
                default:
                echo '5';
                return null;                                                                                          
                }              

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

Ответы [ 7 ]

6 голосов
/ 04 октября 2012

Ни один из ответов, представленных к настоящему моменту, явно не связал дух исходного вопроса с надлежащей конструкцией переключателя. Итак, для записи:

switch (true) {
    case (($level>-100) && ($level<100)):
        echo 'in range one';
        break;
    case (($level>200) && ($level<300)):
        echo 'in range two';
        break;
    default:
        echo 'out of range';
}

В этом использовании коммутатора нет абсолютно ничего плохого.

4 голосов
/ 05 сентября 2010

Помимо if / else, есть еще один способ сделать это:

switch (true)                                                                               
    case $level > -100:
        break;
    case $level <  100:
        break;
    default:
        echo '5';
        return null;
}
4 голосов
/ 05 сентября 2010

Когда вы говорите switch ($level), вы уже сравниваете значение $level. Каждый case может затем проверять только равенство, вы не можете делать сравнения, как в вашем примере. Вместо этого вам придется использовать оператор if:

if ($level > -100 && $level < 100)
  ; // do nothing; equivalent of break in this case
else
  echo '5';

Еще проще, просто отмените условия:

if ($level <= -100 || $level >= 100)
  echo '5';
2 голосов
/ 05 сентября 2010

Другие ответы являются одновременно правильными и неправильными. Неправильно, в том смысле, что в PHP можно делать то, что вы хотите ... измените switch($level) на switch(true), и ваш пример будет работать. Правильно, в том, что это дурной тон и если другие программисты увидят, что в вашем коде они, вероятно, придут за вами с вилами. Это не то, как оператор switch предназначен для использования, и он не будет работать так в большинстве других языков.

0 голосов
/ 05 сентября 2010

Это одна из причин, по которой люди, выступающие за case как превосходное решение для if-else, не соответствуют требованиям. Мне не нравится синтаксис или ограничения - if-ifelse-else гораздо полезнее.

0 голосов
/ 05 сентября 2010

Нет, вы не можете. Оператору switch нужны литералы в блоках case. Вместо этого используйте оператор if:

if(!($level > -100 && $level < 100))
{
  echo '5';
  return null;
}
0 голосов
/ 05 сентября 2010

Нет, ты не можешь.Switch выполняет только сравнение типа «равно».

...