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.


  • Netvibes
  • del.icio.us
  • Sphinn
  • Digg
  • Facebook
  • Mixx
  • Google Bookmarks
  • BlinkList
  • email

Ein Kommentar

  1. Mustafa Mümmelmann sagt:

    Probier mal

    int $var = 0;

    und

    printf(“%i”, $var);

Lasse einen Kommentar zurück