2010-02-24 13 views
5

Ho appena ridotto un bug insensato a cosa c'è nel titolo di questa domanda. Sono sicuro che c'è una spiegazione perfettamente ragionevole per il motivo per cui Php pensa che 0 == '%' (o qualsiasi altro carattere speciale, penso). Ho pensato che sarebbe stato bello avere questa spiegazione su StackOverflow!if (0 == '%') echo "WTF, Php, perché non puoi confrontare le cose in modo sano?"

+1

http://stackoverflow.com/questions/875854/how-best-to-compare-to-0-in-php –

+0

Questo è il motivo per cui scrivo PHP più o meno allo stesso modo in cui scrivo C++. ;) – Teekin

risposta

6

Utilizzo '===' (per un confronto esatto e letterale - i valori devono essere dello stesso tipo e uguali) invece di '==' risolve questo problema Con '==' sta provando a lanciare '%' su un numero e 0 è il meglio che può fare.

+1

Se si utilizza ===, fare attenzione a $ x = '0'; var_dump ($ x === 0) dà false ($ x è una stringa, 0 è un numero intero :) :) –

0

poiche '%' non è vero, dovrebbe essere falso (0), così naturalmente 0 == '%'

;-) strano però

+0

Non converte string in bool, un altro operando è intero e non bool. –

7

Si farà lo stesso per qualsiasi stringa, convertendo una stringa non numerica in numero intero restituisce sempre 0.

+0

Questo è il motivo per cui (insieme a molte altre cose pazzesche) PHP non dovrebbe nemmeno essere considerato un vero "linguaggio di programmazione". – slashCoder

1

Nel caso in cui un operatore di confronto rigoroso non sia direttamente adatto, se si desidera confrontare entrambi i valori come stringhe, è possibile utilizzare strcmp(). Un esempio potrebbe essere dove entrambi i valori sono variabili e i tipi potrebbero essere sia string, sia int. Invece di digitare il cast nella stringa e quindi utilizzare il controllo di uguaglianza rigorosa, strcmp() può essere meno dettagliato.

La coercizione del tipo di php è molto comoda. Ma se non comprendi le sue numerose regole (alcune possono mordere), dovresti cercare di evitare di usarlo. Vedere http://www.php.net/manual/en/types.comparisons.php