Schokokeks

Webhosting

Die drei Gleichheitszeichen

22 November, 2006 - 02:57, CC by-sa
Tags: PHP, security

Vielleicht werden sich einige Leser schon einmal gefragt haben, warum bei Bedingungen in PHP sowohl die Syntax mit zwei als auch mit drei Gleichheitszeichen existiert. Nun, PHP kommt ja mit einem flexiblen Typsystem daher, was nichts anderes bedeutet, dass Variablen in PHP grundsätzlich nicht deklariert werden müssen und dass sie zudem »still« umgewandelt werden können. Diese stille Typumwandlung steht dem PHP-Entwickler auch in Bedingungen zu Verfügung. Sie bringt aber einige Probleme mit sich. Mit einer schlechten Abfrage ist der Entwickler nicht sicher, ob er es wirklich mit einem Integer oder gar mit einem Boolean zu tun hat, denn eine Bedingung kann für beide Typen im Zweifel wahr sein, wie wir weiter unten sehen werden. Dies sorgt für weniger Verlässlichkeit im Code und auch – im schlimmsten Fall – zu Sicherheitsproblemen.

Der Unterschied als Illustration. Hier eine Reihe von Bedingungen, die in PHP immer wahr sind:

1 == true
"beliebiger string" == true
1235 == false
1.12345 == true
0.987 == true

Hatten Sie angenommen, dass ein String automatisch wahr ist oder ein Float-Typ? Erklärt ist das schnell. Wandelt man mit PHPs Cast-Funktionen einen beliebigen String in einen Boolean, so ist dieser immer wahr, selbes gilt für Floats. Wandelt man die Zahl »1« in einen Boolean, so ist dieser auch wahr. Wandelt man eine Zahl die nicht »1« ist in einen Boolean, so ist der zurückgegebene Bool'sche Wert immer unwahr. Beispiel:

  • (bool)1: ergibt »true«
  • (bool)12345: ergibt »false«
  • (bool)"beliebiger string": ergibt »true«
  • (bool)1.2345: Ergibt immer »true«

Das Problem also: man kann sich nicht auf das doppelte Gleichheitszeichen verlassen. Die Lösung hierfür sieht ganz einfach aus: sobald man hier drei Gleichheitszeichen verwendet, versucht PHP intern nicht, die Typen zu konvertieren, sondern die beiden Variablen werden einfach nur miteinander verglichen, ohne PHPs krude automatische Magie. Das ist nicht nur ein Vorteil in punkto Verlässlichkeit, auch Geschwindigkeit wird dadurch gewonnen, denn jede Typenumwandlung kostet Resourcen und damit bares Geld. Die Syntax mit drei Gleichheitszeichen ist nicht nur weniger fehleranfällig, sondern auch noch schneller. Ein lohnenswertes kleines Zeichen mehr, würde ich sagen.

Trackback URL for this post:

http://www.schokokeks.org/trackback/37
 

Hier bieten wir eine große Menge sinnloser E-Mail-Adressen an, die nur für Spammer gedacht sind.