che sto confrontando due stringhe in questo modo:Integer confronto di stringhe sono uguali (bug PHP?)
<?php
$Str1 = '111122223333444455556666';
$Str2 = '111122223333444455557777';
if($Str1 != $Str2){
// Do something
} else {
// Do something else
}
?>
Ovviamente, $ Str1 non è lo stesso di $ Str2, ma ancora esegue sempre l'altro blocco. So che dovrei semplicemente usare ===
o !==
per confrontare qui, ma mi chiedo perché (in pratica) qualsiasi altro valore che cerco, in realtà, valuti il modo in cui è previsto.
Ho letto anche questo nella documentazione "Se la stringa non contiene nessuno dei caratteri '.', 'E' o 'E' e il valore numerico si adatta ai limiti del tipo intero (come definito da PHP_INT_MAX), la stringa sarà valutata come un intero. ", quindi suppongo che non dovrebbe essere inferiore o uguale al valore di PHP_INT_MAX (che è di gran lunga inferiore alle stringhe che sto valutando sopra) - assumendo che sia ciò che significano da "si inserisce". Quindi, perché le stringhe sopra vengono valutate come stesse? Potrebbe essere un bug PHP o c'è qualcosa che mi manca?
Sto usando la versione 5.3.8 di PHP da ieri, proveniente da PHP 5.3.6. Funzionando su Windows XP.
Non riesco a ricreare questo sulla mia installazione 5.3.5. Le stringhe si confrontano con "non uguale" e "non non diseguale". –
L'ho ricreato su PHP 5.2.5 (http://codepad.org/BJZT1KM1) e PHP 5.3.9-dev (http://codepad.viper-7.com/MxwYQw). –