За последние 24 часа нас посетили 16529 программистов и 1679 роботов. Сейчас ищут 846 программистов ...

Сравнение типов

Тема в разделе "Прочие вопросы по PHP", создана пользователем Boolean_Type, 9 апр 2014.

  1. Boolean_Type

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

    С нами с:
    9 апр 2014
    Сообщения:
    9
    Симпатии:
    0
    Всем здравствуйте!
    Разбираюсь с преобразованием типов (пока для примитивов):
    1) при сравнении number == null к какому типу будут приведены операнды до выдачи результата - к булевому или числовому?
    Отличная статья по этой ссылке:
    http://sldn.softlayer.com/blog/dmcaloon/PHP-Type-Conversions-Comparison
    ...гласит, что к булевому (см. таблицу), но в учебнике Котерова написано, что, если один из операндов - число, "сравнение всегда выполняется в числовом контексте, даже если второй операнд — не число." ;

    2) при сравнении string == number операнды преобразовываются к числу. К какому типу - integer или float?
     
  2. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
  3. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Со временем придет осознание того, что лучше не надеяться на динамическую типизацию в ифе. Лучше сравнивать уже подготовленные данные. И через ===. Иначе в ифе можно себе в ногу выстрелить.

    Код (PHP):
    1. $str = 'Пыщ пыщ, однако!';
    2. if (str_pos($str, 'Пыщ')){
    3.      echo 'Найдено!';
    4. } else {
    5.      echo 'Не найдено!';
    6. } 
    В строке стопудово есть "Пыщ", но скрипт скажет, что не нашел такое. А если искать, скажем, запятую, то будет найдено. Привет, типизация!

    Динамическое приведение типов это забавно, но нужно всегда быть настороже. Оно генерит самые подлые баги порой.
     
  4. Boolean_Type

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

    С нами с:
    9 апр 2014
    Сообщения:
    9
    Симпатии:
    0
    Это не те доки, кот. мне нужны)
    Кину ещё ссылку из док-тации:
    http://www.php.net/manual/ru/language.oper....comparison.php
    Там последняя табл. - "Сравнение различных типов", где, в общем-то, написано, что к чему преобразуется при сравнении, просто я хочу уточнить относительно null. Судя по ней, null при сравнении с чем угодно (кроме строки) преобразуется в булево. Правильно?
     
  5. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Думаю, подразумевалось, что пользоваться докой ты умеешь и по ссылкам сам пробежишься.
     
  6. Boolean_Type

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

    С нами с:
    9 апр 2014
    Сообщения:
    9
    Симпатии:
    0
    :))) Так что насчёт ответа на вопрос? В булево?
     
  7. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Null приводится к тому типу, с которым сравнивается.
     
  8. Boolean_Type

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

    С нами с:
    9 апр 2014
    Сообщения:
    9
    Симпатии:
    0
    Вот в этом и корень моего вопроса((( В док-тации (таблице) указано следующее:
    [​IMG]

    Т.е., при сравнении со строкой NULL преобр. в строку, а при сравн-ии с чем угодно другим (тем же числом) - в bool!
    Как же так?(
     
  9. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Бро, чесслово, тебе не все равно? У тебя что-то не работает из-за этого? Или работает не так как надо? Какая разница вообще?
     
  10. Boolean_Type

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

    С нами с:
    9 апр 2014
    Сообщения:
    9
    Симпатии:
    0
    Хочу сделать программку (чисто для себя), кот-ая показывает, как преобразовываются типы при сравнении (каждый из операндов).
     
  11. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Создать себе проблему, чтобы потом ее решить. Ок.
     
  12. Boolean_Type

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

    С нами с:
    9 апр 2014
    Сообщения:
    9
    Симпатии:
    0
    Мне нужен был лишь ответ на поставленный вопрос, а не расценка моих действий.
    Спасибо Вам за ответы)
     
  13. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в исходы загляни.