0 == '' и '0' == '' одинаковы? - PullRequest
2 голосов
/ 22 февраля 2012

Рассмотрим следующие операторы PHP:

echo ( 0  == '' ? 1 : 0); // Output is 1
echo ('0' == '' ? 1 : 0); // Output is 0

Первое напечатает 1, а второе - 0. Разве они не должны печатать 0?Это ожидаемое поведение?Я догадываюсь, потому что второе - это строка, а первое - нет, но я хотел бы получить другой ответ.

Ответы [ 8 ]

6 голосов
/ 22 февраля 2012

Чтение Слабое сравнение с ==

http://php.net/manual/en/types.comparisons.php

3 голосов
/ 22 февраля 2012

В пустой строке Php NULL и 0 равны.Во втором случае '0' - это другая строка, а '' - это другая.Таким образом, вы получите результат false.

"", 0, "0", False, array(), Null все считаются ложными в PHP.

Вы можете использовать ===, чтобы отличать их.

1 голос
/ 22 февраля 2012

Здесь вы можете найти логику сравнения: http://php.net/manual/en/language.operators.comparison.php

Type of Operand 1    Type of Operand 2    Result

null or string       string               Convert NULL to "", numerical or lexical comparison

string, resource     string, resource     Translate strings and resources to numbers, usual math
or number            or number

Это означает, что для '0' == '' применяется первый случай и используется лексическое сравнение .И "0" и "" не равны в соответствии с лексическим сравнением.

Для 0 == '' применяется второй случай.'' преобразуется в число, в данном случае 0, которое равно 0.

1 голос
/ 22 февраля 2012

0 == '' == null

, но '0' - строка.

Вам лучше использовать === , чтобы проверить разницу0, '0', ноль

php > var_dump(0);
int(0)
php > var_dump('0');
string(1) "0"
php > var_dump(null);
NULL
php > var_dump('');
string(0) ""
1 голос
/ 22 февраля 2012

Я думаю, что первая интерпретирует и 0, и пустую строку как "ложные", и они получаются равными. У PHP есть много изюминок в отношении того, что он будет интерпретировать как true / false. Второй сравнивает строку '0' с пустой строкой и выдает неравное.

Чтобы убедиться, что вы сравниваете фактические значения, вы должны использовать === сравнение

1 голос
/ 22 февраля 2012

Это потому, что в первой строке не сравниваются две переменные одного типа:

echo ( 0  == '' ? 1 : 0); // Output is 1
echo ('0' == '' ? 1 : 0); // Output is 0

Обратите внимание на следующее:

echo ( 0  === '' ? 1 : 0); // Output is 0

Оператор === делает тип чувствительнымпроверка на равенство, которая, кажется, то, что вы ожидаете.== сделает нечеткую проверку, если два аргумента не относятся к одному и тому же типу.

Вы должны проверить документацию операторов сравнения для получения дополнительной информации:

Если вы сравниваете число со строкой или сравнение включает числовые строки, то каждая строка преобразуется в число, и сравнение выполняется численно.

1 голос
/ 22 февраля 2012

Это правильное поведение.0 равно пустой строке, а также false / null.

0 голосов
/ 22 февраля 2012

'0' == '' всегда будет ложным.Потому что символ '0' не является пустым символом.Но в PHP 0 (ноль) и пустой символ одинаковы.

...