2014-01-29 6 views
-1

Может кто-нибудь объяснить, почему это происходит,странное поведение при сравнении

<?php 
if (0 == 'fasas')// or if ('fasas' == 0) 
{ 
    exit('if condition success'); 
} 
exit; 

Выход: if condition success

Здесь я проверяю строку эквивалентна нулю, и это всегда успех я могу» t понимать это поведение

ответ

1

См. string conversion to numbers in PHP.

Значение задается начальной частью строки. Если строка начинается с действительных числовых данных, это будет используемое значение. В противном случае значение будет равно 0 (ноль).

Итак:

if ('fasas' == 0) { 
    echo 'This is true, fasas has no numbers so it is converted to 0'; 
} 

if ('0fasas' == 0) { 
    echo 'This is true also, 0fasas is converted to 0'; 
} 

if ('1fasas' == 0) { 
    echo 'This is false, 1fasas is converted to 1'; 
} 
+0

отличная работа thanx это то, что я искал –

0

Вы должны использовать ===, который является строгим компасом rison, что означает сравнение значения и типа.

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

if ('fasas' === 0) 
{ 
    exit('if condition success'); 
} 
exit; 

Вы также можете использовать strcmp(), которая является безопасной двоичное сравнение.

This is an interesting blog about it.

Надеюсь, это поможет!

+0

Я знаю, что, но мой вопрос 'если ('' == 0) { выход ('если условие успеха'); } exit; 'будет ли этот выход' if condition success ' –

+0

if (' any string '== 0) ВСЕГДА БУДЕТ ИСТИННЫМ. if ('any string' === 0) всегда будет false, даже если ('0' === 0) – Yani

+0

Я знаю это, но обычно, когда мы сравниваем, он должен проверять эквивалент, это то, что многие фреймворки делают thanx –

Смежные вопросы