Сыворотка оценивает это как истину?Почему это оценивается как истинный
<?php
$val2=0;
//outputs that is an error123
if($val2=='error123'){
echo 'that is an error123<br />';
}else{
echo 'that is not an error123<br />';
}
Сыворотка оценивает это как истину?Почему это оценивается как истинный
<?php
$val2=0;
//outputs that is an error123
if($val2=='error123'){
echo 'that is an error123<br />';
}else{
echo 'that is not an error123<br />';
}
Вы сравниваете строку с целым числом. Чтобы провести сравнение, строка сначала преобразуется в целое число. Когда 'error123'
преобразуется в целое число становится 0.
echo intval("error123");
Результат:
0
В PHP инструкции есть an explanation для такого поведения.
Если вы сравниваете число со строкой или сравниваете числовые строки, то каждая строка преобразуется в число и выполняется сравнение численно.
Существует краткая справочная страница PHP type comparison tables, которая показывает вам результат различных сравнений. См. Таблицу «Свободные сравнения с ==». Интересная часть этого вопроса заключается в том, что 0 == "php"
показан как ИСТИНА.
Существует также страница на type juggling. A user comment на этой странице дает почти тот же пример, что и этот.
Если вы не хотите, чтобы тип жонглирования использовал ===
вместо ==
.
Дайте этому попытку: $val2==='error123'
Это будет оценивать значение и тип переменной. Подробнее здесь:
http://us.php.net/manual/en/language.operators.comparison.php
Истина. И сумасшедший. – eyelidlessness
Так что, если он должен был пойти наоборот, '' error123 '== $ val2', будет ли это оцениваться как false? – Ponkadoodle
@wallacoloo Нет, это также оценило бы как истину. Оператор == заставляет численное оценивать, если один из операндов - это число ... а также, если строки являются «числовыми». Действительно, это безумие. http://www.php.net/manual/en/language.operators.comparison.php – leonbloy