Seiten: [1]   Nach unten
  Drucken  
Autor Thema: Vergleiche ergeben manchmal falsche Ergebnisse  (Gelesen 50 mal)
0 Mitglieder und 1 Gast betrachten dieses Thema.
piratos
Administrator
Normal
*****
Offline Offline

Beiträge: 8020



« am: 29. Juli 2010, 16:27:15 »

Der normale PHP Vergleich sieht so aus:

$var1 ='1';$var2='1';

if ($var1 == $var2)
  echo 'hallo';

Soweit so gut , kennt jeder - es kommt ein hallo

Es gibt aber noch den Vergleich

if ($var1 ===  $var2)
  echo 'hallo';

Dabei sind die Variablen nur gleich, wenn auch die Type stimmt - auch hier kommt ein hallo.

Nachstehender Code aber wirft kein hallo raus, da wir unterschiedliche Typen haben.
$var1 =1;$var2='1';

if ($var1 === $var2)
  echo 'hallo';

Nun ist es in einigen Fällen  der Fall, das man z.B. über Funktionen her === verwenden sollte, weil einfach der Code erheblich kürzer ist.

Und gleichzeitig werden die Parameter einer solchen Funktion auch gelegentlich mit unterschiedlichen Typen geliefert.

Als Beispiel dieser teilweise Funktionskopf aus TPLE:

 function bss($name, $var=null, $antwort='' .....

In $var wird der Wert übergeben der selected="selected" dann bewirken soll, wenn sein Wert identisch ist mit einem Wert in $antwort ist.

Nun sind die übergebenen Typen im Prinzip her unbekannt.

Wenn wir nun einal ein Datum vergleichen bzw. einen Teil davon, der z.B. aus einem Datumsstring extrahiert wurde, dann hat der Teil den  Type string, in Antwort stecken aber Werte vom Type int.
Resultat : es erfolgt kein Treffer mit === und damit keine selected Auswahl.

Da hilft eine vorherige Konvertierung:

        $t1=gettype($var);
        $t2=gettype($antwort[0]); // antwort ist immer ein Array
        if ($t1 <>$t2)
            settype($var,$t2);



Gespeichert

Seiten: [1]   Nach oben
  Drucken  
 
Gehe zu: