2010-05-24 4 views

ответ

13

Вы сравниваете строку с целым числом. Чтобы провести сравнение, строка сначала преобразуется в целое число. Когда 'error123' преобразуется в целое число становится 0.

echo intval("error123"); 

Результат:

0 

В PHP инструкции есть an explanation для такого поведения.

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

Существует краткая справочная страница PHP type comparison tables, которая показывает вам результат различных сравнений. См. Таблицу «Свободные сравнения с ==». Интересная часть этого вопроса заключается в том, что 0 == "php" показан как ИСТИНА.

Существует также страница на type juggling. A user comment на этой странице дает почти тот же пример, что и этот.

Если вы не хотите, чтобы тип жонглирования использовал === вместо ==.

+3

Истина. И сумасшедший. – eyelidlessness

+0

Так что, если он должен был пойти наоборот, '' error123 '== $ val2', будет ли это оцениваться как false? – Ponkadoodle

+0

@wallacoloo Нет, это также оценило бы как истину. Оператор == заставляет численное оценивать, если один из операндов - это число ... а также, если строки являются «числовыми». Действительно, это безумие. http://www.php.net/manual/en/language.operators.comparison.php – leonbloy

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