[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите разобраться со сравнением.
Net-bot
Привет всем. Вот уже вторые сутки не могу понять, при каких условиях оператор сравнения == (или ===) возвращает true, а при каких false. Уже на двух форумах задавал подобный вопрос, ни кто не дал внятного, полного, понятного для меня ("чайника") ответ. Читаю книгу по PHP с самого начала, типы данных я изучил, но все никак до меня не доходит. Только вроде понял, начинаю перечитывать примеры из книги, и сразу натыкаюсь на опровержение своей догадки. Пожалуйста, если вам не трудно, помогите мне четко понять эти условия.
Вот например:
1 == "true" возвращает false и при том 0 == "false" возвращает true. Где логика?
И таких примеров в книге много. Если конкретней, то мне как раз непонятно сравнение данных с false или true.
P.S. Прошу прощения, если создал тему не в том разделе.



Спустя 4 минуты, 54 секунды (31.05.2011 - 12:54) waldicom написал(а):
== - проверяется только значение
=== - проверяется тип и значение

Спустя 5 минут, 30 секунд (31.05.2011 - 12:59) Net-bot написал(а):
Цитата (waldicom @ 31.05.2011 - 09:54)
== - проверяется только значение
=== - проверяется тип и значение

Это я знаю. Вопрос не так звучал. Я говорю про операнды.

Спустя 7 минут, 20 секунд (31.05.2011 - 13:06) Семён написал(а):
Проверь внимательней
if(1==TRUE) {
echo "TRUE";
}


Оно и при 2-ух будет TRUE
И только при 0 - FALSE

Спустя 22 минуты, 7 секунд (31.05.2011 - 13:28) denash написал(а):
Цитата (Net-bot @ 31.05.2011 - 09:49)
Привет всем. Вот уже вторые сутки не могу понять, при каких условиях оператор сравнения == (или ===) возвращает true, а при каких false. Уже на двух форумах задавал подобный вопрос, ни кто не дал внятного, полного, понятного для меня ("чайника") ответ. Читаю книгу по PHP с самого начала, типы данных я изучил, но все никак до меня не доходит. Только вроде понял, начинаю перечитывать примеры из книги, и сразу натыкаюсь на опровержение своей догадки. Пожалуйста, если вам не трудно, помогите мне четко понять эти условия.
Вот например:
1 == "true" возвращает false и при том 0 == "false" возвращает true. Где логика?
И таких примеров в книге много. Если конкретней, то мне как раз непонятно сравнение данных с false или true.
P.S. Прошу прощения, если создал тему не в том разделе.

true и "true" это совсем разные вещи!!!! (в первом случае boolean во втором strign). PHP очень своеобразен в представлении типов, но тебе ещё самому нужно книжек перечитать и разобратся на собственном опыте. Простой пример :

if ("fgsdgsf"==0) echo "yes"; else echo "not"; // Как думаешь, что выведет, а выведет yes


if ("fgsdgsf"=="0") echo "yes"; else echo "not"; // Как думаешь, что выведет, а выведет not


У меня щас мало времени, чтоб толкого обьяснить, но вечером я буду online и отвечу на твои вопрос, если ты тут будешь

Спустя 3 минуты, 41 секунда (31.05.2011 - 13:32) Игорь_Vasinsky написал(а):
Цитата
if ("fgsdgsf"==0) echo "yes"; else echo "not"; // Как думаешь, что выведет, а выведет yes


if ("fgsdgsf"=="0") echo "yes"; else echo "not"; // Как думаешь, что выведет, а выведет not

оригинальнй примерчик wink.gif

Спустя 16 минут, 56 секунд (31.05.2011 - 13:49) Net-bot написал(а):
Цитата (denash @ 31.05.2011 - 10:28)
Цитата (Net-bot @ 31.05.2011 - 09:49)
Привет всем. Вот уже вторые сутки не могу понять, при каких условиях оператор сравнения == (или ===) возвращает true, а при каких false. Уже на двух форумах задавал подобный вопрос, ни кто не дал внятного, полного, понятного для меня ("чайника") ответ. Читаю книгу по PHP с самого начала, типы данных я изучил, но все никак до меня не доходит. Только вроде понял, начинаю перечитывать примеры из книги, и сразу натыкаюсь на опровержение своей догадки. Пожалуйста, если вам не трудно, помогите мне четко понять эти условия.
Вот например:
1 == "true" возвращает false и при том 0 == "false" возвращает true. Где логика?
И таких примеров в книге много. Если конкретней, то мне как раз непонятно сравнение данных с false или true.
P.S. Прошу прощения, если создал тему не в том разделе.

true и "true" это совсем разные вещи!!!! (в первом случае boolean во втором strign). PHP очень своеобразен в представлении типов, но тебе ещё самому нужно книжек перечитать и разобратся на собственном опыте. Простой пример :

if ("fgsdgsf"==0) echo "yes"; else echo "not"; // Как думаешь, что выведет, а выведет yes


if ("fgsdgsf"=="0") echo "yes"; else echo "not"; // Как думаешь, что выведет, а выведет not


У меня щас мало времени, чтоб толкого обьяснить, но вечером я буду online и отвечу на твои вопрос, если ты тут будешь

Типы я как раз все знаю, и определять их умею. А вот с этими операторами сравнения я вообще как ежик в тумане.

Спустя 7 минут, 18 секунд (31.05.2011 - 13:56) Игорь_Vasinsky написал(а):
= - оператор присваивания ($a = 2;)
== - сравнение значения ($a = 5; $b=5; $a == $b - true)
== - сравнение значения и типа 23 === "23" - false
! - отрицание
!= - не равно
<> - не равно
> - больше
< - меньше
>= - больше равно
<= - меньше равно

Спустя 7 минут, 40 секунд (31.05.2011 - 14:04) alex12060 написал(а):
Я читал про это, чтобы не наврать, я еще раз найду и расскажу. Чтобы скучно не было, вот еще пример:

Всем известно, что false - 0
Но в этом примере проявляется "ложный софизм" Пыха)


var_dump(false > -1);

Спустя 2 минуты, 14 секунд (31.05.2011 - 14:06) linker написал(а):
Цитата
true и "true" это совсем разные вещи!!!! (в первом случае boolean во втором strign).

Суть не в этом, а суть в неявном переводе из одного типа в другой. В данном случае, строка "true" приведётся к типу integer, т.е. вместо "true" будет "подставлено" 0, сравнение 1 == 0 - даёт false. Если сравнивать 1 == "1true", то оно вернёт true, т.к. приведение значения "1true" к типу integer даст значение 1.

Спустя 3 минуты, 15 секунд (31.05.2011 - 14:10) linker написал(а):
alex12060
А данном случае, false не приводится к типу integer, дающее 0, здесь -1 приводится к булевскому типу и даёт true. Поэтому мы получаем ожидаемый результат - false.

Спустя 3 минуты, 39 секунд (31.05.2011 - 14:13) alex12060 написал(а):
linker

Тут либо так:


false > -1 \\ => false > true ===> false


Либо так:


false > -1 \\=> 0 > 1 ====> false

Спустя 1 минута, 57 секунд (31.05.2011 - 14:15) linker написал(а):
alex12060
Нету тут "либо", -1 никогда не станет 1 без каких-либо математических операций, поэтому -1 есть true, а false - false, что в итоге даёт false.

Спустя 1 минута, 29 секунд (31.05.2011 - 14:17) alex12060 написал(а):
Получается false имеет приоритет над true?

Спустя 6 минут, 1 секунда (31.05.2011 - 14:23) linker написал(а):
Скажем так, булевский тип имеет приоритет над другими типами при неявном приведении типов в логических конструкциях.

Спустя 11 минут, 30 секунд (31.05.2011 - 14:34) alex12060 написал(а):
А вот это откомментируйте пожалуйста:


My preferred explanation, false is ((unsigned int) 0), when you evaluate that statement, the operation takes the
signedness of the first operand, ergo your doing an 'unsigned greater than' operation.
-1 is 0xffffffff as a 32 bit int, which as an unsigned number is about 4 billion.

So:
echo false > -1

Is really:

echo 0 > 4294967295

Which you can understand is false... my background is C, same rules apply there too.

Спустя 21 минута, 23 секунды (31.05.2011 - 14:56) linker написал(а):
alex12060
От куда ты это выдрал?

true > -1 даёт false, потому что true > true - есть false
0 > -1 даёт true, по понятным причинам

PHP не поддерживает целые беззнаковые числа, поэтому любое число большее 2147483647 будет автоматически урезано до этого значения, о каких 4294967295 тут может вообще идти речь. Именно поэтому -1 в PHP НИКОГДА не будет преобразовано в 4294967295.

Спустя 5 минут, 55 секунд (31.05.2011 - 15:01) alex12060 написал(а):

Спустя 2 минуты, 11 секунд (31.05.2011 - 15:04) linker написал(а):
Забудь, забугорный пхпшный-нуб толкнул фуфло в комментах, а ты и уши развесил.

Спустя 2 минуты, 47 секунд (31.05.2011 - 15:06) alex12060 написал(а):
linker

Я ничего не вешал, просто попросил раскомментировать smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.