Приведение типов и сравнение с Loose Operator «==»
У меня ужасная проблема. Я заметил это раньше, но до сегодняшнего дня не обращал на это внимания. Я пытался написать свою собственную проверку для целочисленных строк. Я знаюis_numeric()
но этого недостаточно, потому что это считаетсяfloat
как числовой не толькоintegers
а такжеis_int()
который не работает с числами строк.
Я сделал что-то похожее на это
$var1 = 'string';
$var2 = '123';
var_dump( (int)$var1 == $var1);// boolean true
var_dump((int)$var2 == $var2);// boolean true
var_dump((int)$var1);//int 0
var_dump($var1);//string 'string' (length=6)
Как и ожидалось, второй дамп выводит true, так как я ожидаю, что при свободном сравнении php строки и целочисленные версии будут равн
Но с первым я не понимаю, почему это так. Я пытался привести кbool
и это все равно дает мне тот же результат.
Я пытался присвоить приведенную переменную новому variablr и сравнить два, все тот же результат
Я что-то не так делаю или это ошибка php?
*** Обратите внимание, я не сравниваю типы здесь. Я на самом деле пытаюсь воспользоваться тем фактом, чтоint 0
не равноstring 'string'
.
Я написал целочисленную проверку по-другому, поэтому мне не нужны альтернативы.
*** Правка Я сделал дополнительную проверку, и оказалось, что0 == 'string'
тоже верно. Как это возможно?
*** Редактировать 2 Ниже приведено несколько правильных ответов на вопрос. Спасибо всем, кто ответил.