Wie bitte? (0 == '*')

Klein0r

Erfahrenes Mitglied
Hallo Leute.

Wer kann mir das erklären?
Warum ist die Bedingung wahr?

Ich fall vom Glauben ab :)

PHP:
if (0 == '*') { ...

Code:
php -r 'var_dump("*" == "0");'
bool(false)

php -r 'var_dump("*" == 0);'
bool(true)

php -r 'var_dump("1" == 0);'
bool(false)

php -r 'var_dump("1a" == 0);'
bool(false)

php -r 'var_dump("1" == 0);'
bool(false)

php -r 'var_dump("/" == 0);'
bool(true)

php -r 'var_dump("(" == 0);'
bool(true)

php -r 'var_dump("((" == 0);'
bool(true)

php -r 'var_dump("(§$/)§)()" == 0);'
bool(true)
 
Zuletzt bearbeitet:
Hmm, es liegt vermutlich daran, das 0 eine Zahl ist. Folglich wird versucht, den zweiten Operanden ebenfalls in eine Zahl umzuwandeln - was natürlich nicht geht, weil es sich nicht um ein Character handelt, was eine Ziffer darstellt. Also kommt beim Wandeln von * in eine Zahl 0 raus. Dann ist die Bedingung natürlich wahr.

Aber ich gebe dir grundsätzlich recht. Das ist sehr fragwürdig. Aber du kannst das relativ einfach lösen: Verwende drei! Gleichzeichen.
 
Ja das mit den drei Gleichzeichen ist klar, aber warum kann das überhaupt sein? In solchen Fällen mache ich mir doch wirklich Sorgen wie viele Fehler meine Scripts in enthalten könnten...

Hier wurde auch gefragt - liegt wohl wirklich an der Typ-Konvertierung.
https://bugs.php.net/bug.php?id=53584
 
Zurück