PHP-переключатель без перерыва;

Что случилось с моим переключателем? Теперь результат:

< more > less = equality != no't equality 

Как и должно быть:

 < more = equality <?php $page = 99; switch ($page) { case $page < 121: echo '< more <br/>'; case $page > 123: echo '> less <br/>'; case $page == 99: echo '= equality <br/>'; case $page != 99: echo '!= no\'t equality <br/>'; } ?> 

В вашем заявлении switch вы сравниваете число с логическими значениями.
Возьмем первый случай. $page < 121 true , поэтому сравнение имеет значение 99==true которое true соответствии с http://docs.php.net/language.types.type-juggling ( переключатель выполняет свободное сравнение , а не строгим, как === ). Таким образом, выполняется первый блок case.
И так как у вас нет оператора break, он переходит к следующему блоку блока, а следующий и так далее …
Значение: Это не будет работать так, как предполагалось, независимо от того, используете ли вы break или нет.

Вы, похоже, не понимаете, как работает коммутатор. То, что вы хотите, – это последовательность утверждений if, т.е.

  if ($page < 121) echo '< more <br/>'; if ($page > 123) echo '> less <br/>'; if ($page == 99) echo '= equality <br/>'; if ($page != 99) echo '!= no\'t equality <br/>'; 

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

 switch ($variable) { case "me": echo "variable is me"; break; case "you": echo "variable is you"; break; default: echo "Variable is neither of us"; } 

Вышеупомянутый блок блокировки коммутатора можно записать, как показано ниже:

 if ($variable=="me") { echo "variable is me"; } elseif ($variable=="you") { echo "variable is you"; } else { echo "variable is neither of us"; } 

Не размещайте выражение рядом с оператором case.

 switch ($somethng) { case $something < 10: break; case $something > 20: break; } 

Коммутатор предназначен для использования только для сравнения переменной с набором значений. ТОЛЬКО! Для всего остального используйте инструкцию if … elseif..else.

Блок выше – неправильное использование. Иногда может быть правдой более одного из этих выражений.

 $var = "cat"; switch($var) { case "cat": echo 'My '.$var.' is called Bob.'; break; case "dog": echo 'My '.$var.' is called James.'; break; default: echo "I don't have an animal"; break; } 

В statemant переключателя вы сравниваете $ var против значения в случае. Если есть совпадение, фактический случай будет выполнен, в противном случае будет выполнен по умолчанию. Вы не можете использовать <>! = … в одном случае только значения: 1, '1', 'dog', $ var2 и т. Д.

Если вы хотите запустить ту же команду для двух случаев, вы можете сделать:

 $var = "cat"; switch($var) { case "cat": case "dog": echo 'My '.$var.' is called James.'; break; default: echo "I don't have an animal"; break; } 

В вашем коде вы забыли поставить перерыв; в конце каждого случая, поэтому вы видите «все» в своем выпуске. И вы пропускаете по умолчанию: тоже.

Для задачи, которую вы выполняете, я предлагаю вам использовать инструкции if.

если я не ошибаюсь, вы не можете использовать эти символы <> raw в html. вместо этого использовать сущности & gt; и & lt;.

если вы запустите скрипт в командной строке, я получил следующий вывод.

 <?php ob_start(); $page = 99; switch ($page) { case $page < 121: echo '< more <br/>'; case $page > 123: echo '> less <br/>'; case $page == 99: echo '= equality <br/>'; case $page != 99: echo '!= no\'t equality <br/>'; } $buffer = ob_get_clean(); echo str_replace('<br/>', "\n", $buffer); 

вывод

 < more > less = equality != no't equality 

который, по-видимому, является правильным поведением.

Важно понять, как выполняется оператор switch, чтобы избежать ошибок. Оператор switch выполняет строку за строкой (фактически, оператор-оператор). В начале код не выполняется. Только когда оператор case найден со значением, которое соответствует значению выражения switch, PHP начинает выполнять инструкции. PHP продолжает выполнять инструкции до конца блока коммутатора или в первый раз, когда видит оператор break.

http://de.php.net/manual/de/control-structures.switch.php

«; ломать; case $ page> 123: echo '> less
«; ломать; case $ page == 99: echo '= равенство
«; ломать; case $ page! = 99: echo '! = no \' t равенство
«; ломать; default: echo 'Default'; }?>