Quakenet/#php Tutorial

Hinweis: Wenn sie diese Seite von einer externen URL aufgerufen haben achten sie darauf das alle Kapitel aufeinander aufbauen. Stellen sie daher sicher dass sie alle vorherigen Kapitel gelesen haben, da sie sonst relevante Informationen übersehen.

Vergleichsoperatoren

  1. Vergleichsoperator ==
  2. Andere Vergleichsoperatoren
  3. Zuweisung vs. Vergleichsoperator

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 
7;     // ist true
$var 10 <= 10;  // ist true
$var 9;     // ist falsch
?>

Dann gibt es noch den Ungleichoperator != um zu prüfen ob zwei Werte unterschiedlich sind.

<?php
$var 
10 != 10;  // false
$var != 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";  // ist true
$var === "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
?>

Fragen zum Kapitel

Keine Fragen zum Kapitel vorhanden

Zurück zu Weiter zu
Copyright © bei den OPs von #php.de/QuakeNet Valid XHTML 1.0 Strict Valid CSS!