За последние 24 часа нас посетили 34295 программистов и 1709 роботов. Сейчас ищут 806 программистов ...

ЧТО? Разве 0=="произвольная_строка" true???

Тема в разделе "PHP для новичков", создана пользователем SpikePHP, 6 май 2015.

  1. SpikePHP

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

    С нами с:
    6 май 2015
    Сообщения:
    130
    Симпатии:
    23
    Привет. У меня этот код отрабатывает и выдает сообщение :
    Код (Text):
    1. $d = 0;
    2.  
    3. if ($d=="dffff") {echo "wtf integer is = to string";}
    Как такое может быть? Если я что-то не так делаю, объясните мне пожулайста.

    Добавлено спустя 9 минут 47 секунд:
    О мой бог!

    В случае, если вы сравниваете число со строкой или две строки, содержащие числа, каждая строка будет преобразована в число, и сравниваться они будут как числа. Эти правила также распространяются на оператор switch. Преобразование типов не происходит при использовании === или !== так как в этом случае кроме самих значений сравниваются еще и типы.

    Тема закрыта, я думаю , если никто ничего не хочет добавить)
     
  2. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Да вы "что-то" не так делаете, сравнивая строку с числом.
    Поэтому читать приведение типов, типы данных и их гибкое сравнение ("==") в PHP.
    Код (Text):
    1. if ($d==="dffff") {echo "wtf integer is = to string";}
    2. else{
    3. echo 'Ничего пободного!';
    4. }
    upd. Хорошо что сами дошли и плохо что не сразу.
     
  3. romach

    romach Старожил

    С нами с:
    26 окт 2013
    Сообщения:
    2.904
    Симпатии:
    719
    Именно так.
    Код (Text):
    1. echo (int) "dffff"; // 0
    Дело в том, что '==' не проверяет типы, а старается привести к одному. Строка превращается в 0, сравнивается с 0 и получается true.

    Поэтому, без явной необходимости '==' использовать не нужно, вместо этого сравнивать надо через '==='. Оно учтет типы данных и вернет false, даже при (0 === "0").

    p.s. пых он такой, да )
     
  4. SpikePHP

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

    С нами с:
    6 май 2015
    Сообщения:
    130
    Симпатии:
    23
    Читаю json строку, а там ключи могут быть как числа так и строки. Буду впредь знать. Спасибо за ответы!
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Не читайте json-строку, используйте http://php.net/manual/ru/function.json-decode

    Все уже украдено до нас.
     
  6. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    md5('240610708') == md5('QNKCDZO')
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Прикольно, псевдоколлизия :)
     
  8. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    читер.
     
  9. VaneS

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

    С нами с:
    16 ноя 2011
    Сообщения:
    636
    Симпатии:
    4
    Адрес:
    Россия
    А в чем прикол то?
     
  10. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    https://php.net/manual/ru/language.types.string.php#languag ... conversion

    md5('240610708') равно 0e462097431906509019562988736854
    md5('QNKCDZO') равно 0e830400451993494058024219903391

    var_dump('0e462097431906509019562988736854' == '0e830400451993494058024219903391') -> bool(true)
    var_dump('0e462097431906509019562988736854' === '0e830400451993494058024219903391') -> bool(false)

    $foo = (int)"0e830400451993494058024219903391";
    var_dump($foo) -> int(0)
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Да, шикарный пример того, как == позволяет отстрелить себе ногу. Просто шикарный.
     
  12. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    ты не объяснил саму суть.
    var_dump( (int)"0f830400451993494058024219903391" );
    тоже ноль, однако сравнение через == вернет уже false
    )
     
  13. denis01

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

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    runcore пусть сам поиграет и посмотрит значения
     
  14. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Строки, инт и буль
    Код (PHP):
    1. $a = 'dfffff';
    2. $b = 0;
    3. $c = true;
    4. var_dump($a == $b);
    5. var_dump($a == $c); 
    строки и арефметика
    Код (PHP):
    1. $a = 1;
    2. $b = '10oooo';
    3. echo $a + $b;
    4.  
     
  15. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    арИфметика ;)
    з.ы. без обид (мало ли), просто чтоб на будущее знал, - лишним не будет)
     
  16. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    твоя подпись не на английском, если что. это руглиш.
     
  17. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    почему? буду рад услышать наставление
    серьезно
     
  18. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    наверное потому что это топорный перевод русского в английский в стиле "мгимо финишд"
     
  19. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    возможно, но если и так, то хотел бы увидеть пример того, как подобные предложения должны выглядеть.
     
  20. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Sometimes I want to write any text here, but, do you know, how it feels? It feels like it's missing.

    Как-то так, плюс минус. Понять точно, что за мысль ты доносишь, немного сложно, написал как понял.
    Или там у тебя что-то типа:

    Sometimes I want to write any text here, but, do you know this feel? Feel like it's missing.
     
  21. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    я планировал там написать "иногда я хочу написать здесь какой-нибудь текст, но какой смысл? его нет"
    отметил для себя промах с частицами "to", а вот насчет "feels" не понял, зачем оно.
     
  22. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вот прям "мгимо финишд" что называется про тебя. кто это такой кого зовут Смысл? может быть все же смысл в данном контексте неодушивленный и ты не можешь его называть he, он может быть только it. в общем тройка в школьном курсе это максимум с таким английским. про to вообще молчу. реально ты взял русский текст и просто слово в слово перевел на английский сильно не задумываясь о связанности текста. русский человек так же машинно переведет слово в слово и получит завершенное осмысленное предложение. любой владеющий английским языком поделит на ноль примерно после want. практика нужна, да.
     
  23. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    был молодой - забивал х*й, стал постарше - нет возможности. так что
    да
     
  24. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    ВОТЭТОПОРОВОТ. Надо подлатать свой внутренний словарик. Не знал, что это слово еще и "смысл" может означать.
    Добавлено спустя 1 минуту 54 секунды:
    нет возможности? У тебя дома и в кармане есть аппараты, позволяющие получать информацию на любом языке мира и находить в любом уголке мира собеседников. Более того, честь куча сервисов, у которых обмен лингвистический - вся суть. Возможностей со времени твоей "молодости" стало в разы больше. В десятки раз больше.

    Тогда так, вариация:
    Sometimes I want to write any text here, but is there meaning? No, is not.

    sense я б не стал юзать тут, неоднозначное слово, сильно контекст просит.

    Вообще, дословно прям топором нельзя переводить тексты. Языки отличаются не только тем, что слова разные.
     
  25. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    не, ну так-то я иногда почитываю/учу время от времени,- я имею ввиду про образование государственное - не учат.
    насчёт "sense":