Tipo de conversão e comparação com o operador solto “==”

Tenho um problema que me deixa desconcertado. Eu notei isso antes, mas não dei nenhuma atenção até hoje. Eu estava tentando escrever meu próprio cheque para cadeias inteiras. Eu sei deis_numeric() mas não é suficiente, pois contafloat como numérico não apenasintegers eis_int() que não funciona em números de strin

Fiz algo semelhante a este


$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)

omo esperado, o segundo var dump é verdadeiro, pois espero que, com a simples comparação do php, as versões string e número inteiro sejam iguai

No entanto, com o primeiro, não entendo por que isso acontece. Eu tentei transmitir parabool e ainda me dá o mesmo resultado.

Eu tentei atribuir o cast var a uma nova variável e comparar os dois, ainda o mesmo resultado

Isso é algo que estou fazendo de errado ou é um bug do php?

*** Nota: não estou comparando tipos aqui. Na verdade, estou tentando aproveitar o fato de queint 0 não é igual astring 'string'.

Eu escrevi meu cheque inteiro de maneira diferente, para não precisar de alternativas para iss

*** Edit Eu fiz algumas verificações extras e acontece que0 == 'string' também é verdade. Como isso é possível

*** Editar 2 Existem várias respostas corretas abaixo para a pergunta. Obrigado a todos que responderam.

questionAnswers(7)

yourAnswerToTheQuestion