[PHP] Проблема с оператором switch

  • Автор темы Автор темы Raskolnikov
  • Дата начала Дата начала

Raskolnikov

Green Team
30.07.2017
67
21
BIT
0
Начал изучать php, написал вот такой код
PHP:
<?php

$i = 60 ;
switch ($i) {
    case $i > 60:
        echo "Скорость превышена!";
        break;
    case $i <= 60 && $i > 0:
        echo "Скорость в норме";
        break;
    case $i == 0:
        echo "Стоишь";
        break; 
    default:
        echo "Скорость не определена";
        break; 
    }
    

?>

Если в переменную i подставить значение 0, то вывод "Скорость превышена!". В чём проблема?
 
Начал изучать php, написал вот такой код
PHP:
<?php

$i = 60 ;
switch ($i) {
    case $i > 60:
        echo "Скорость превышена!";
        break;
    case $i <= 60 && $i > 0:
        echo "Скорость в норме";
        break;
    case $i == 0:
        echo "Стоишь";
        break;
    default:
        echo "Скорость не определена";
        break;
    }
   

?>

Если в переменную i подставить значение 0, то вывод "Скорость превышена!". В чём проблема?

'Это просто счастливое совпадение приведения типов к bool, но работать будет не со всеми значениями и условиями'. Советую использовать "if", "else", с ними не так муторно
 
  • Нравится
Реакции: Raskolnikov
При валидной установке интерпретатора php, данный скрипт НЕ БУДЕТ работать как указал автор. Варианта три:
Код:
switch(вариант) {
case 1: echo 'тс напутал что-то'; break;
case 2: echo 'битый/модифицированный интерпретатор'; break;
case 3: echo 'ошибка железа'; break;
}
 
Начал изучать php, написал вот такой код
PHP:
<?php

$i = 60 ;
switch ($i) {
    case $i > 60:
        echo "Скорость превышена!";
        break;
    case $i <= 60 && $i > 0:
        echo "Скорость в норме";
        break;
    case $i == 0:
        echo "Стоишь";
        break;
    default:
        echo "Скорость не определена";
        break;
    }
 

?>

Если в переменную i подставить значение 0, то вывод "Скорость превышена!". В чём проблема?

Тут дело в особенности php

Дело в том что когда происходит сравнивание $i > 60 результат равен false а это в свою очередь равно 0 и в таком случае результат проверки срабатывает в пользу первого условия.
 
Тут дело в особенности php

Дело в том что когда происходит сравнивание $i > 60 результат равен false а это в свою очередь равно 0 и в таком случае результат проверки срабатывает в пользу первого условия.
Блииин, элементарно ведь! Еслиб ты тут не написал я бы никогда не додумался
 
Тут дело в особенности php

Дело в том что когда происходит сравнивание $i > 60 результат равен false а это в свою очередь равно 0 и в таком случае результат проверки срабатывает в пользу первого условия.
Благодарю за ответ. Я так понимаю данный оператор нерационально использовать в таком виде, правильно будет писать в case конкретные значения без использования операторов сравнения
 
Благодарю за ответ. Я так понимаю данный оператор нерационально использовать в таком виде, правильно будет писать в case конкретные значения без использования операторов сравнения
Именно, если тебе надо проверка используй if
 
  • Нравится
Реакции: Raskolnikov
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!