За последние 24 часа нас посетили 17916 программистов и 1582 робота. Сейчас ищут 1357 программистов ...

почему так получается?

Тема в разделе "PHP для новичков", создана пользователем Hogan, 14 апр 2011.

  1. Hogan

    Hogan Активный пользователь

    С нами с:
    13 июл 2009
    Сообщения:
    10
    Симпатии:
    0
    Всем привет!

    Вот код:

    Код (Text):
    1. $a='John';
    2.     switch($a){
    3.         case 0: echo 66; break;
    4.         case 'John': echo 3;break;
    5.         case 1: echo 4; break;
    6.         default: echo true;
    7.     }
    В результате вылезает 66. Хотя по идее вроде 3 должно быть. Хм.... :?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    PHP:
    1.  
    2. <?php
    3.  
    4. $a = 'John';
    5. switch ($a) {
    6.   case 'John':
    7.     echo 3;
    8.     break;
    9.   case 0:
    10.     echo 66;
    11.     break;
    12.  
    13.   case 1:
    14.     echo 4;
    15.     break;
    16.   default:
    17.     echo true;
    18. }
     
  3. titch

    titch Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    при первом сравнении строки с числом строка преобразуется в число. т.к. преобразование корректно не может быть выполнено, строка преобразуется в 0. 0==0, т.е. выводится 66. всё честно. switch всегда сравнивает по ==, а не по ===.
     
  4. titch

    titch Активный пользователь

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    igordata, обогнал меня...))
     
  5. Hogan

    Hogan Активный пользователь

    С нами с:
    13 июл 2009
    Сообщения:
    10
    Симпатии:
    0
    А почему ж всё-таки 66, если смотреть мой код? Ведь 0 далеко не John. PHP вродь пропустить его должен? Иль я чёт не так понимаю.
     
  6. Hogan

    Hogan Активный пользователь

    С нами с:
    13 июл 2009
    Сообщения:
    10
    Симпатии:
    0
    titch понятно ) Странная особеность )
     
  7. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    А лучше следить за типами данных, строки сравнивать со строками, числа с числами.
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Hogan
    есть по такому случаю возможность проверки с тройным равно - это еще и тип проверяет
     
  9. Hogan

    Hogan Активный пользователь

    С нами с:
    13 июл 2009
    Сообщения:
    10
    Симпатии:
    0
    igordata ясно. А как сделать так, чтобы switсh сравнивал не по == , а по === ?
     
  10. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    PHP:
    1. $a='John';
    2. switch($a){
    3.   case '0': echo 66; break;
    4.   case 'John': echo 3;break;
    5.   case '1': echo 4; break;
    6.   default: echo true;
    7. }
    :)
     
  11. Hogan

    Hogan Активный пользователь

    С нами с:
    13 июл 2009
    Сообщения:
    10
    Симпатии:
    0
    YSandro, У меня появляется такой результат:

    Код (Text):
    1. 3- ---
    2. - ---
    3. - ---
    :) глюк какой-то
     
  12. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    Странно, у меня 3 выводит.
     
  13. Hogan

    Hogan Активный пользователь

    С нами с:
    13 июл 2009
    Сообщения:
    10
    Симпатии:
    0
    А не, всё нормально, забыл другие строчки кода закомментить :)