2011-12-29 6 views
17

Можно создать дубликат:
Why does PHP consider 0 to be equal to a string?сравнение строк php с целым числом 0 возвращает true?

У меня есть этот кусок кода:

$o['group'] = "prueba"; 
if($o['group'] == 0){ 
    die("test"); 
} 

Почему тест печати? как возможно, что строка равна нулю?

+1

В PHP, пустую строку и строку ' "0"' оба будут равны нулю с оператором равенства ('== '). –

+0

- не пустая строка. –

+6

@MichaelMior: И любая другая строка, которая не может быть преобразована в число. –

ответ

10

Используйте оператор сравнения с проверкой типа «===». Посмотрите на пример http://php.net/manual/en/language.operators.comparison.php и объясните, почему нечисло строка по сравнению с нулем всегда возвращает true.

18

, если вы хотите, чтобы точно соответствовать строка попытаться использовать точный typof три равные знаки, как так
if($o['group'] === 0){
== всегда будет вычисляться верно при сравнении строки в целое число от 0

'string' == 0 также оценивает значение true, потому что любая строка преобразуется в целое число по сравнению с целым числом. Если PHP не может правильно преобразовать строку, тогда он будет оцениваться как 0. Таким образом, 0 равно 0, что равно true.

От here

+1

Все еще неправильно. ''0.1e2' == 0' is false, хотя' (int) '0.1e2' === 0' истинно. Строковое содержимое определяет, какой тип данных (* int * или * float *) преобразуется в строку. – Gumbo

+0

Да, это все еще неправильно. Работает только если $ o ['group'] == '0' –