Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2012, 21:08   #1
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию Сравнение типов

PHP код:
$g='xa';
if(
$g==intval($g)) echo "SAME"
Почему 'xa' == 0???
Pamparam вне форума Ответить с цитированием
Старый 30.06.2012, 21:55   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Pamparam Посмотреть сообщение
Почему 'xa' == 0???
При сравнении строки и числа происходит неявное приведение строки к числовому типу, а как видно из твоего кода - эта строка преобразуется в 0:
Цитата:
Значение определяется по начальной части строки. Если строка начинается с верного числового значения, будет использовано это значение. Иначе значением будет 0 (ноль).
Получается 0 == 0.
Преобразование строк в числа
Таблица сравнения типов
Andkorol вне форума Ответить с цитированием
Старый 30.06.2012, 22:02   #3
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

Спасибо, но логичнее было бы переводить тип к типу первого из сравниваемых значений или к строке, т.к. при strtoint строка потеряет все не int символы, а при переводе из inttostr ничего не потеряется
Pamparam вне форума Ответить с цитированием
Старый 30.06.2012, 22:29   #4
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Pamparam Посмотреть сообщение
логичнее было бы переводить тип к типу первого из сравниваемых значений или к строке, т.к. при strtoint строка потеряет все не int символы, а при переводе из inttostr ничего не потеряется
Нет в этом абсолютно ничего логичного, т.к. теряется весь смысл сравнения (арифметическая операция, между прочим - потому к строкам имеет весьма условное отношение).
На результат сравнения 2-х переменных никогда не должно влиять их местоположение в выражении, результат сравнения всегда должен быть одинаков.
Ваш, "логичный" вариант этого не допускает:
PHP код:
if('xa' == 0// FALSE, т.к. привели к строке, ('xa' != '0') - строки не равны
if(== 'xa'// TRUE, т.к. привели к числу, (0 == 0) - числа равны 
И в чем тут логика..?
Andkorol вне форума Ответить с цитированием
Старый 30.06.2012, 23:09   #5
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

грубо говоря, число - это тоже набор цифр, как и строка - набор из символов. Ну наверное же, когда я их сравниваю, я хочу сравнить этот набор с другим, а не предвзято приравнивать строку к 0
Цитата:
На результат сравнения 2-х переменных никогда не должно влиять их местоположение в выражении, результат сравнения всегда должен быть одинаков.
нафиг тогда нужно переставлять эти значения? =) Вот отсюда и логика - первый сравнитель определяет тип сравнения
Pamparam вне форума Ответить с цитированием
Старый 30.06.2012, 23:28   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Pamparam Посмотреть сообщение
нафиг тогда нужно переставлять эти значения? =) Вот отсюда и логика - первый сравнитель определяет тип сравнения
Я ж вроде показал выше результаты сравнения по вашей логике - вы находите их приемлимыми?
Считаете нормальной необходимость каждый раз при написании кода сравнения заморачиваться тем, какой же тип имеет "первый сравнитель" - чтоб в итоге получился ожидаемый результат?
А если этот "первый сравнитель" - переменная, определенная фиг знает где-то ранее в коде, в другом совершенно файле, получена от другого скрипта и т.п.?
Как тут сходу угадать её тип - чтоб написать правильное сравнение?
Вводить дополнительное логическое ветвление для сравнения разных возможных типов данных?

Ну, вобщем - радует то, что написанием ЯП занимаются люди с логикой мышления, отличной от вашей.
Потому пока волноваться особо не о чем.
А вот если вы задумаете под эту логику написать свой собственный ЯП - ну тогда всё...
Andkorol вне форума Ответить с цитированием
Старый 30.06.2012, 23:35   #7
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

Цитата:
Сообщение от Andkorol Посмотреть сообщение
Я ж вроде показал выше результаты сравнения по вашей логике - вы находите их приемлимыми?
я ж вроде показал, что логике это вполне соответствует
Цитата:
Сообщение от Andkorol Посмотреть сообщение
Считаете нормальной необходимость каждый раз при написании кода сравнения заморачиваться тем, какой же тип имеет "первый сравнитель" - чтоб в итоге получился ожидаемый результат?
А если этот "первый сравнитель" - переменная, определенная фиг знает где-то ранее в коде, в другом совершенно файле, получена от другого скрипта и т.п.?
Как тут сходу угадать её тип - чтоб написать правильное сравнение?
Ну да. Нафиг вообще знать что ты сравниваешь. АЙДА ВСЁ В ИНТИГЕРЫ И К НУЛЮ ПРИРАВНЯТЬ СТРОКИ!
Цитата:
Сообщение от Andkorol Посмотреть сообщение
Ну, вобщем - радует то, что написанием ЯП занимаются люди с логикой мышления, отличной от вашей.
Потому пока волноваться особо не о чем.
А вот если вы задумаете под эту логику написать свой собственный ЯП - ну тогда всё...
Не знал, что логика бывает разной. Если что-то обосновано и имеет место, то это логично
Цитата:
Сообщение от Andkorol Посмотреть сообщение
А вот если вы задумаете под эту логику написать свой собственный ЯП - ну тогда всё...
Нелогично, все то, что не нравится и не подходит переделывать по-своему

Последний раз редактировалось Pamparam; 30.06.2012 в 23:38.
Pamparam вне форума Ответить с цитированием
Старый 30.06.2012, 23:40   #8
Mortimoro
Форумчанин
 
Регистрация: 03.12.2010
Сообщений: 334
По умолчанию

Цитата:
Сообщение от Pamparam Посмотреть сообщение
число - это тоже набор цифр, как и строка - набор из символов.
зебра - набор из полосок, решетка - набор из клеточек, следовательно число, строка, зебра и решетка - это одно и то же. логично.
Mortimoro вне форума Ответить с цитированием
Старый 30.06.2012, 23:42   #9
Pamparam
Форумчанин
 
Регистрация: 08.11.2009
Сообщений: 225
По умолчанию

Цитата:
Сообщение от Mortimoro Посмотреть сообщение
зебра - набор из полосок, решетка - набор из клеточек, следовательно число, строка, зебра и решетка - это одно и то же. логично.
лолшто?) я где-то писал, что число и строка это одно и то же?
или вам слабо представляется, что число это набор цифр, а строка - набор символов?
Pamparam вне форума Ответить с цитированием
Старый 30.06.2012, 23:48   #10
Mortimoro
Форумчанин
 
Регистрация: 03.12.2010
Сообщений: 334
По умолчанию

а вам слабо представляется разница между строкой и числом?
PHP код:
if('xa' == 0// FALSE
if(== 'xa'// TRUE


if('xa' == '0'// FALSE
if('0' == 'xa'// FALSE 
Mortimoro вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
несоответствие типов Rin БД в Delphi 7 11.01.2011 14:27
Несоответствие типов. Иван=) Помощь студентам 7 04.11.2010 13:27
преобразование типов в Си HoOpe Помощь студентам 5 11.03.2009 21:58
Преобразование типов MAKEDON Общие вопросы C/C++ 3 02.03.2009 18:27
Совместимость типов DeDoK Общие вопросы Delphi 2 06.05.2008 21:28