BUG in IF-Abfrage?

Folgender Code gibt darunter stehende Ausgabe:

if( $verstecke_buchstabe_int == ‚num‘ ){
echo ‚$verstecke_buchstabe_int=>‘.$verstecke_buchstabe_int;

$verstecke_buchstabe_int => 0

Wie ist das möglich?!

kein Bug,
hängt mit der dynamischen typisierung von PHP zusammen.

da $verstecke_buchstabe_int eine Zahl ist, versucht der PHP Interpreter aus

if( $verstecke_buchstabe_int == ‚num‘ ) einen Zahlenvergleich zu machen

if($verstecke\_buchstabe\_int == 0)

um das zu verhindern gibt es 2 möglichkeiten:

if( (string) $verstecke\_buchstabe\_int == 'num' )

oder

if( $verstecke\_buchstabe\_int === 'num' )

im ersten Fall wird $versteckte_buchstaben_int in einen String konvertiert und somit wird ein Stringvergleich gemacht.

im zweiten Fall wird ein typensicherer Vergleich gemacht.
heißt neben dem Inhalt der beiden Werte wird auch der typ der Werte verglichen.

siehe auch: http://www.php.net/manual/de/types.comparisons.php

Gruß

und wenn wir das anders rum schreiben ?

if( ‚num‘ == $verstecke_buchstabe_int )

wird nun string konvertiert ?

1 Like

nein

es ist egal ob die Werte vor oder hinter dem Vergleichs-Operator stehen.

Gruß

huch hat sich seit PHP4 bzw PHP3 ganz schön was ve
huch hat sich seit PHP4 bzw PHP3 ganz schön was veändert.

is ja eigentlich positiv. muss aber jetzt sehr mit alten scripten aufpasssen.

danke