Vergleichsoperatoren in PHP

In PHP werden häufig Variablen mit Werten bzw. anderen Variablen verglichen, z.B. bei der if-, else-Abfrage. Hierfür können Vergleichsoperatoren verwendet werden. Damit kann man z.B. in einem Online-Shop prüfen, ob der Bestellwert eines Benutzers kleiner als 100 € ist und die Versandkosten davon abhängig machen. Man kann auch prüfen, ob eine Variable identisch (gleich) mit einem anderen Wert ist, größer ist etc. Die folgenden Vergleichsoperatoren stehen zur Verfügung.

  • == (ist gleich bzw. identisch)
  • === (ist gleich bzw. identisch, auch der Datentyp)
  • <> (ist ungleich bzw. nicht identisch)
  • != (ist ungleich bzw. nicht identisch, hat denselben Sinn wie bei <>)
  • !== (ist ungleich bzw. nicht identisch, mit Typprüfung)
  • < (ist kleiner)
  • <= (ist kleiner oder gleich)
  • > (ist größer)
  • >= (ist größer oder gleich)

Der Unterschied zwischen == und === ist, dass bei drei Gleichheitszeichen nicht nur geprüft wird, ob der Wert identisch ist, sondern auch der Datentyp. Den Unterschied kann man beim folgenden Code feststellen. Die Variable $a ist vom skalaren Datentyp int und hat den Wert 1. Die Variable $b hat ebenfalls den Wert 1, ist jedoch vom Typ string, da der Wert in Hochkommas gesetzt ist. Die erste Abfrage trifft zu, die zweite dagegen nicht, da der Datentyp unterschiedlich ist.

$a = 1;
$b = '1';

// Trifft zu, aufgrund der automatischen Typkonvertierung
if ($a == $b)
{
  echo 'a ist gleich b';
}
else
{
  echo 'a ist nicht gleich b';
}

// Trifft nicht zu, da Datentypen unterschiedlich sind
if ($a === $b)
{
  echo 'a ist gleich b';
}
else
{
  echo 'a ist nicht gleich b';
}

Mit den Operatoren <>, != und !== kann man prüfen, ob etwas ungleich bzw. nicht identisch ist. Hierbei wird mit !== auch der Datentyp berücksichtigt und die Bedingung trifft zu, wenn die Datentypen unterschiedlich sind. Beim folgenden Code würden die ersten beiden Abfragen nicht zutreffen, da beide Werte identisch sind und der Programmteil nach else würde ausgeführt werden. Sie sind zwar von unterschiedlichen Datentypen, das spielt bei <> und != jedoch keine Rolle. Erst bei der dritten Abfrage wird mit !== geprüft, ob auch die Datentypen unterschiedlich und das trifft in dem Fall zu.

$a = 1;
$b = '1';

// Trifft nicht zu, da beide gleich sind
if ($a <> $b)
{
  echo 'a ist nicht gleich b';
}
else
{
  echo 'a ist gleich b';
}

// Trifft nicht zu, da beide gleich sind
if ($a != $b)
{
  echo 'a ist nicht gleich b';
}
else
{
  echo 'a ist gleich b';
}

// Trifft zu, da Datentypen unterschiedlich sind
if ($a !== $b)
{
  echo 'a ist nicht gleich b';
}
else
{
  echo 'a ist gleich b';
}

Der Vollständigkeit halber sind nachfolgend einige Beispiele mit den übrigen Vergleichsoperatoren. Die ersten beiden Abfragen würden zutreffen, da $a kleiner als $b ist, die nächsten beiden dagegen nicht.

$a = 1;
$b = 2;

// Trifft zu, da a kleiner als b ist
if ($a < $b)
{
  echo 'a ist kleiner als b';
}
else
{
  echo 'a ist nicht kleiner als b';
}

// Trifft zu, da a kleiner oder gleich b ist
if ($a <= $b)
{
  echo 'a ist kleiner oder gleich b';
}
else
{
  echo 'a ist nicht kleiner oder gleich b';
}

// Trifft nicht zu, da a nicht größer als b ist
if ($a > $b)
{
  echo 'a ist größer als b';
}
else
{
  echo 'a ist nicht größer als b';
}

// Trifft nicht zu, da a nicht größer oder gleich b ist
if ($a >= $b)
{
  echo 'a ist größer oder gleich b';
}
else
{
  echo 'a ist nicht größer oder gleich b';
}

In der Praxis werden die Werte der zu vergleichenden Variablen häufig aus dem Programmablauf oder aus einer Datenbankabfrage zugewiesen und nicht manuell. Wenn man z.B. eine Datenbank mit dem Geschlecht, Namen und Vornamen von Benutzern hat, könnte man eine Datenbankabfrage durchführen und in Verbindung mit der if-, else-Abfrage überprüfen, ob das Geschlecht weiblich ist und beim Zutreffen den Text "Guten Tag Frau..." ausgeben lassen und ansonsten "Guten Tag Herr...".