1. Vergleichsoperator ==
Um zwei Werte auf Gleichheit zu testen verwendet man in PHP den ==
Operator. Auf beiden
Seiten des Operators werden die Inhalte hingeschrieben die man vergleichen möchte.
Diese können Variablen sein oder auch direkte Werte. PHP wertet dann einen solchen
Ausdruck in einen boolischen Wert um, das Ergebnis ist somit entweder false
oder true
. Dieses Ergebnis kann dann später weiterverwendet werden, wie
z.B. in Fallunterscheidungen und Kontrollflußstrukturen.
<?php
"max" == "müller"; // ergibt bool(false), das Ergebnis wurde jedoch nicht verwendet/gespeichert
$check = "max" == $var; // prüft den Inhalt und speichert true oder false in $check
var_dump('foo' == 'bar'); // gibt bool(false) aus
?>
2. Andere Vergleichsoperatoren
Neben ==
gibt es noch weitere Vergleichsoperatoren. Für Zahlen existieren
zusätzlich die Operatoren <
, <=
, >
und >=
die entsprechend das Prüfen was die Zeichen darstellen und
wie man sie im täglichen Sprachgebrauch benutzt.
<?php
$var = 5 < 7; // ist true
$var = 10 <= 10; // ist true
$var = 9 > 9; // ist falsch
?>
Dann gibt es noch den Ungleichoperator !=
um zu prüfen ob zwei
Werte unterschiedlich sind.
<?php
$var = 10 != 10; // false
$var = 0 != 1; // true, da verschieden
?>
Als Steigerung der Vergleichsoperatoren ==
und !=
gibt es noch die Operatoren ===
und !==
. Dabei wird
neben den Wert auch der Typ überprüft. Somit sind die Werte "10"
(als String) und 10
(als Integer) gleich wenn man
==
verwendet, jedoch unterschiedlich wenn man ===
verwendet.
<?php
$var = 5 == "5"; // ist true
$var = 5 === "5"; // ist false, da int != string
$var = 'Max' == "Max"; // ist true, obwohl single quote string und double quote string
$var = 'Max' === "Max"; // auch true, beide haben die gleichen Stringinhalte und beide sind vom Typ String
?>
Dieses Wissen braucht man bei Funktionen die z.B. bei einem Fehlverhalten den
boolischen Wert false
zurückliefern jedoch aber auch
Werte zurückliefern die mit dem ==
Operator auch als
false
angesehen werden (wie z.B. die 0
).
<?php
$var = false == 10; // false, da ungleich
$var = false == 0; // true, obwohl das eine eine Zahl und das andere ein boolean ist
$var = false === 10; // nichts geändert, false
$var = false === 0; // diesmal false, da int != boolean ist
?>
3. Zuweisung vs. Vergleichsoperator
Typische Probleme bei dem Vergleichsoperator besteht wenn man ausversehen ein Gleichheitszeichen vergisst und dann eine Zuweisung anstelle des Vergleichs hat. Die PHP-Skripte sind dann meistens syntaktisch richtig, berechnen aber nicht das was der Autor wollte.
<?php
$check = $name == 'Max'; // prüft den Inhalt von $name gegen den String 'Max' und speichert
// true in $check
$check = $name = 'Max'; // speichert den Wert 'Max' in $name (insbesondere wird
// dann $name überschrieben) und das Ergebnis (die Zuweisung)
// wird dann in $check gespeichert (enthält dann auch den String 'Max')
?>
Besonders ärgerlich ist dies in einer If-Abfrage, wo man ein Variableninhalt prüfen wollte, jedoch stets eine Zuweisung macht und somit, neben der fehlerhaften If-Abfrage, ungewollt die zu prüfende Variable verändert. Daher sollte man stehts genau prüfen ob man eine Zuweisung oder ein Vergleich hat und was man eigentlich haben möchte. Um diesen Stolperstein entgegen zu wirken schreibt man bei einem Vergleich den konstanten Wert links vom Vergleichoperator.
<?php
"Max" == $name;
?>
Somit wird sichergestellt das hier nur der Vergleichsoperator verwendet werden kann denn eine Zuweisung in einen konstanten String ist nicht möglich. PHP erzeugt hier dann eine Fehlermeldung der Form Parse error: syntax error, unexpected '=' in .... Einen Parse Error zu haben und zu korrigieren ist besser als keinen Fehler zu haben und stundenlang nach dem Fehler zu suchen.
<?php
$check = "Max" == $name; // prüfen und true/false in $check speichern
$check = $name = "Max"; // könnte nicht als Fehlerursache erkannt werden
$check = "Max" = $name; // Zuweisung in einen String klappt nicht -> Fehlermeldung
?>