Приведение типов и сравнение с 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 Ниже приведено несколько правильных ответов на вопрос. Спасибо всем, кто ответил.

Ответы на вопрос(7)

Ваш ответ на вопрос