Habe vor kurzem nach langem debugge feststellen müssen, dass PHP wohl einen Bug beim Vergleichen von String- mit Intergerwerten macht. Genauere Details in seinem Blog: PHP Bug im Vergleichoperator.

Was genau passiert und wie man es verhindern kann.

$a = 0;
$b = "abdbbsb";

if($a == $b) echo 1;
else echo 0;
# Ausgabe 1

if((string)$a == $b) echo 1;
else echo 0;
# Ausgabe 0

if($a === $b) echo 1;
else echo 0;
# Ausgabe 0

Eine Antwort zu “vermeindlicher PHP-Bug bei Vergleichoperatoren?”

  1. FibreFoX says:

    Auch wenn der Artikel schon etwas älter ist, möchte ich anderen, die das Problem auch haben, ein wenig helfen:

    Ist aber ein wenig logisch, denn dadurch, dass du zuerst ein Ding hast, dass einem “Int” ähnelt und von php auch als Integer behandelt wird, denkt es sich “Oh, ich vergleiche Integer”… der interne Cast von “abdbbsb” auf Int wird intern wohl so gemacht:

    wandleInInteger(){
    return (int) “abdbbsb”;
    }

    Da beim vermeindlichen casten bzw. hier konvertieren eine exception auftritt liefert die das ding 0 zurück.

    Allerdings steht genau das auch so in der Doku unter “String conversion to numbers”:
    http://www.php.net/manual/en/language.types.string.php#language.types.string.conversion

    Das ist allerdings ganz cool wenn man gegen SQL-Injection ohne Prepared Statements arbeiten möchte und sich ein eigenes Framework dazu aufbauen möchte.

Hinterlasse einen Kommentar.

Network-wide options by YD Freelance Wordpress Development