Вот например:
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) Семён написал(а):
Проверь внимательней
Оно и при 2-ух будет TRUE
И только при 0 - FALSE
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 |
оригинальнй примерчик
Спустя 16 минут, 56 секунд (31.05.2011 - 13:49) Net-bot написал(а):
Цитата (denash @ 31.05.2011 - 10:28) | ||
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
! - отрицание
!= - не равно
<> - не равно
> - больше
< - меньше
>= - больше равно
<= - меньше равно
== - сравнение значения ($a = 5; $b=5; $a == $b - true)
== - сравнение значения и типа 23 === "23" - false
! - отрицание
!= - не равно
<> - не равно
> - больше
< - меньше
>= - больше равно
<= - меньше равно
Спустя 7 минут, 40 секунд (31.05.2011 - 14:04) alex12060 написал(а):
Я читал про это, чтобы не наврать, я еще раз найду и расскажу. Чтобы скучно не было, вот еще пример:
Всем известно, что false - 0
Но в этом примере проявляется "ложный софизм" Пыха)
Всем известно, что 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.
А данном случае, 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 никогда не станет 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.
От куда ты это выдрал?
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
Я ничего не вешал, просто попросил раскомментировать
Я ничего не вешал, просто попросил раскомментировать