dedlfix: Vergleich zweier Strings

Beitrag lesen

Hi!

if("0000000000"=="0") muss false ergeben, da dies eindeutig zwei unterschiedliche Strings sind. Doch php meint es sei true.
Ich denke das PHP sich trotz Anführungszeichen nich sicher ist, welcher Datentype gemeint ist.

PHP ist kein Mensch. Es arbeitet nach festen Regeln. Und eine davon ist, dass alles, was nach Zahl aussieht, in bestimmten Kontexten wie eine Zahl behandelt wird, egal welcher Variablentyp das konkret ist.

bei eine Zuweisung kann man expliziet den Datentyp mitgeben damit PHP weiss welcher Datentype gemeint ist.

$int_wert  = (integer) 123;
$real_wert = (float) 123;
$str_wert  = (string) 123;

Das ist keine Datentypangabe sondern ein Typecast. Der nützt dir aber im weiteren Verlauf gar nichts, weil PHP nicht unterscheidet, wie eine Variable zu ihren konkreten Typ gekommen ist. Ob du nun "123" oder (string)123 schreibst kommt auf das selbe raus. Wann PHP seinen automatischen Typecasts vornimmt ist vom Kontext abhängig und nicht von der Art, wie eine Variable zu ihrem Typ gekommen ist.

Hab es nicht getestert - aber in der if abfrage muesste die Festlegung des Datentyps syntaktisch auch erlaubt sein.

Ja, bringt aber null Punkte, weil anschließend trotzdem der automatische Typecast zuschlägt.

var_dump((string)"000" == (string)"0"); // true
  var_dump("000" == "0"); // true

Man braucht für den gegebenen Fall immer den typsicheren Vergleich

var_dump("000" === "0"); // false

oder strcmp().

Lo!