Kopfschmerzen und PHP

Da denkt man, man hat PHP und dessen gestörten Datentypen einigermaßen im Griff und dann kommt soetwas:

$var = 0;
 
if ($var == "all") {
	echo "true";
} else {
	echo "false";
}

Man würde vermuten, das Ergbnis sei false, aber seltsamerweiße kommt hier true heraus.

Schauen wir uns $var und den String “all” mal genauer an:

$var = 0;
 
var_dump((bool)"all")."\n";
var_dump((bool)$var);
 
// Ergbnis:
// bool(true)
// bool(false)

Wieso ergibt dann in PHP true == false true?

Den Grund habe ich auf der PHP type comparison tables im letzen Comment gefunden:

“php” == 0

This is true, because the string is casted interally to an integer. Any string (that does not start with a number), when casted to an integer, will be 0.

Wie auch immer.

Ich nutze jedenfalls für meinen Teil strikte Vergleiche mit drei Leerzeichen ===, damit ist man immer “save”. Am besten wäre es natürlich überhaupt nicht die Datentypen einer Variable zu mixen, aber bei kleinen Quick&Dirty Scripte passiert soetwas mal.

Ein Kommentar zu “Kopfschmerzen und PHP“

  1. Mustafa Mümmelmann sagt:

    Probier mal

    int $var = 0;

    und

    printf(“%i”, $var);

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">