Por que string é maior ou menor do que o inteiro?

Não consigo entender o porquê a afirmação é verdadeira ambas as vezes.

$hello="foo"; if($hello=0) { echo "ohh yess!"; } 

ele produz

 yes ohh yess! 

Eu sei que isso é uma comparação ilegal entre inteiro e string, mas porque, afinal, isso é verdade.

   

Como o manual do PHP diz:

O valor é dado pela parte inicial da cadeia. Se a seqüência for iniciada com dados numéricos válidos, esse será o valor usado. Caso contrário, o valor será 0 (zero).

Nesse caso, o string foo avalia a zero quando a comparação é feita e ambas as condições if , portanto, serão avaliadas para TRUE .

Efetivamente, você estará fazendo:

 if(0 < = 6) { echo "yes\n"; } if (0 >= 0) { echo "ohh yess!"; } 

Use o operador === se quiser ter certeza de que os tipos de variables ​​também são levados em consideração.

Isso é por causa do malabarismo em PHP . Então "foo" avalia a zero porque é convertido em um inteiro. Se você usar o conversor idêntico do operador ( === ), as conversões não são feitas, então "foo" é tratado como uma string literal e sua declaração será avaliada como falsa.

Atualmente está verificando if $hello exist e, em ambos os casos, é verdade. Pode ser que você queira isso

 $hello="foo"; if(strlen($hello)< =6){ echo "yes\n"; } if (strlen($hello)>=0) { echo "ohh yess!"; }