Hallo Felix,
Heute bin ich in PHP wieder über den Vergleichsoperator gestolpert:
na dann willkommen im großen Club. ;-)
$key = 0;
if ($key != 'new') {
// kommt nicht an
}
>
> Natürlich war die Lösung wieder der typsichere Vergleichsoperator mit dem extra Istgleichzeichen:
Genau. Natürlich gibt es ab und zu Fälle, in denen die automatische Typumwandlung von Vorteil ist, zum Beispiel wenn URL-Parameter (die ja grundsätzlich Strings sind) als Zahlenwert verwendet werden sollen. Aber allgemein ist diese automatische Umwandlung ein omnipräsenter Fallstrick.
> Warum ist denn eine Ganzzahl null einem Stringwert gleichzusetzen? Wird jetzt zuerst der String in eine Zahl umgewandelt (im Sinne von `abs('*new*')`{:.language-php}?), oder wird irgendwie anders umgewandelt, um die beiden Werte zu vergleichen?
Für PHP ist intern der Typ "integer" der einfachere gegenüber "string", deshalb wird der string-Operand zunächst in number konvertiert, bevor der Vergleich durchgeführt wird. Dabei wird "\*new\*" verständlicherweise zu 0, und das ist nicht ungleich 0.
[Etwas ausführlicher ...](http://sldn.softlayer.com/blog/dmcaloon/PHP-Type-Conversions-Comparison)
[Die entsprechende Seite im PHP-Manual](http://php.net/manual/en/types.comparisons.php), die ich erst verlinken wollte, scheint ein kleines Problem zu haben - Opera zeigt bei mir den gesamten Fließtext in der Schriftart Wingdings oder einer ähnlichen Symbolschrift an. Firefox nimmt stattdessen eine normale, lesbare Schrift. Merkwürdig. :-(
So long,
Martin
--
Niemand lebt allein von seinen Träumen.
Aber wer träumt, lebt noch.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(