:::: MENU ::::

WebDevExp

Meine Erfahrungen in der Webentwicklerwelt

vermeindlicher PHP-Bug bei Vergleichoperatoren?

php

vermeindlicher PHP-Bug bei Vergleichoperatoren?

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

One Comment

  1. FibreFoX

    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.

    Antworten

Leave a comment

Loading Facebook Comments ...