> **Hinweis:** Dieser Artikel könnte für einige Anfänger etwas unübersichtlich sein, da er ein grundlegendes Verständnis von PHP voraussetzt. Wenn Sie sich für die Funktionsweise von Bedingungen interessieren, lesen Sie über Bedingungen im Einsteigerkurs.
Unterstützung: | Alle Versionen: PHP 4, PHP 5, PHP 7 |
---|---|
Kurzbeschreibung: | Validierung von einer oder mehreren Aussagen |
Typ: Statement, Konstrukt (keine Funktion) |
Oft muss man feststellen, ob eine Gleichheit gilt oder ob eine Aussage wahr ist, dafür sind Bedingungen da. PHP verwendet die folgende Syntax wie viele andere Sprachen (insbesondere C):
if (/* logische Aussage */) {// konstruieren}
Jeder logische Ausdruck hat einen Wert von TRUE
(wahr) oder FALSE
(falsch), es gibt keine anderen Optionen.
Beispiel für den Vergleich, ob die Variable "$x" größer ist als die Variable "$y":
$x = 10;$y = 5;if ($x > $y) {// Dieser Teil des Skripts wird ausgeführt, wenn die Bedingung erfüllt ist} else {// Dieser Teil des Skripts wird ausgeführt, wenn die Bedingung nicht zutrifft}
Das Bedingungskonstrukt hat einen obligatorischen Inhalt in runden Klammern, in dem der zu prüfende Ausdruck angegeben wird, zusammengesetzt aus Operatoren (Übersicht unten), mehrere Ausdrücke können mit logischen Operatoren verknüpft werden (Übersicht unten).
Darüber hinaus enthält die Bedingung zwei optionale Anweisungsblöcke.
Aus praktischen Gründen sollten Sie immer mindestens den ersten Anweisungsblock einbeziehen, wenn die Bedingung wahr ist, da sonst die Prüfung des Ausdrucks keinen Sinn macht.
Generell:
Die einzig mögliche Schreibweise mit einem Semikolon (außer bei Verwendung des endif-Konstrukts):
if ($x > $y);
Eine solche Bedingung ist jedoch sinnlos, da in beiden Fällen das Ergebnis des Vergleichs verworfen wird und keine zur Bedingung gehörende Anweisung ausgeführt wird.
Unter bestimmten Umständen kann die "if"-Konstruktion unter Weglassung der zusammengesetzten Klammern verwendet werden. Dies kann nur in den folgenden Fällen erreicht werden:
Ausführlichere Informationen finden Sie in den folgenden 3 Kapiteln.
1. nur ein Befehl ~ abgekürzte Syntax
Wenn Sie eine Bedingung erstellen, in der Sie nur ein Konstrukt (Anweisung) ausführen wollen, können Sie entweder die klassische Klammerschreibweise verwenden:
if ($x > 10) { $y = $x; }
Oder wir können die Klammern weglassen:
if ($x > 10) $y = $x;
Dieses Verhalten gilt jedoch nur für einen einzigen Befehl in der unmittelbaren Umgebung der Bedingung.
Ein besseres Beispiel (nur das Konstrukt $y = $x
wird bedingt ausgeführt, der Rest wird immer ausgeführt):
$x = 5;$y = 3;$z = 10;if ($x > $y)$y = $x;$x = 3;
2. Doppelpunkt und endif;
if (/* Ausdruck */):konstrukt;konstrukt;konstrukt;endif;
Diese Notation gilt jedoch seit langem als veraltet, da sie an Orientierung verliert, wenn mehrere Bedingungen ineinander übergehen.
Anmerkung: Ich möchte anmerken, dass dieser Stil auch von einigen Leuten wie Yuh (siehe seinen Artikel) geschätzt wird. Gott bewahre, dass Sie das irgendwo verwenden.
3. Ternärer Ausdruck ~ einzeilige "in-line"-Notation
Gelegentlich ist es sinnvoll, einen einfachen Inline-Vergleich mit einer anderen Aktion durchzuführen (z. B. zusammen mit der Definition einer neuen Variablen). Wenn nur eine Anweisung ausgeführt werden soll, kann die gesamte Prozedur auf eine einzige Zeile reduziert werden, auch wenn sie so einfach wie möglich gehalten wird.
$x = 5;$isBiggerThanTwo = ($x > 2 ? true : false);// oder noch kürzer:$isBiggerThanTwo = ($x > 2);// oder ohne Klammern:$isBiggerThanTwo = $x > 2;
Innerhalb der Bedingung werden zwei Arten von Operatoren verwendet:
Operator | Bedeutung |
---|---|
== |
Gleich |
=== |
Ist gleich und hat den gleichen Datentyp |
!= |
Ist nicht gleich |
>= |
Ist gleich oder größer |
<= |
ist gleich oder kleiner |
>` | Größer |
< |
Weniger |
Beispiel (gültig, wenn "$x nicht 5" ist):
if ($x != 5) { ... }
Operator | Alternative | Bedeutung | Wahr, wenn: |
---|---|---|---|
&& |
AND | und gleichzeitig | beide Werte sind wahr |
` | ` | OR | |
^^ |
XOR | exklusives ODER | mindestens eines ist wahr oder falsch, aber nie beides |
! |
nicht | Negation des Ausdrucks | wahr wenn falsch und umgekehrt |
Die Negation eines Ausdrucks hängt von den jeweiligen Umständen ab. |
Ein komplexeres Beispiel:
$x = 5;$y = 3;$z = 8;if ($x > 0 && !($y != 2 && $z == $x) || $z > $y) { ... }
Oft können wir es uns leisten, einen der beiden Operatoren (oder sogar beide) wegzulassen, aber wir dürfen nie die Regeln der richtigen Verwendung vergessen, damit der resultierende Ausdruck funktioniert.
Im Allgemeinen wird beim Testen eines Ausdrucks ohne Operator geprüft, ob sein Wert TRUE
oder nicht leer ist (z.B. ob er eine Zahl ungleich Null, eine nicht leere Zeichenkette, ... enthält).
Beispiele:
$x = 5;$y = 3;$z = 8;if ($x) { ... } // funktioniert, weil $x nicht leer istif ($x && $y) { ... } // funktioniert, da $x und $y nicht leer sindif (!$x) { ... } // schlägt fehl, weil TRUE negiert wirdif (isset($z)) { ... } // funktioniert, weil die Variable $z existiert
Aber es können knifflige Situationen entstehen, insbesondere wenn:
if ($x)
und die Variable $x
enthält Null (0
), dann ist die Bedingung nicht erfüllt.$x
enthält die Zeichenkette 0
(die Zahl Null), weil sie zu Null überläuft und der Ausdruck daher nicht wahr ist.'false'
als Zeichenkette zurückgibt, dann ist die Bedingung wiederum wahr, weil die Zeichenkette nicht leer ist.Ich empfehle eine einfache und effektive Lösung für dieses Problem: Fragen Sie nach der Anzahl der zurückgegebenen Zeichen. Wenn die Zeichenkette leer ist (oder die Variable nicht existiert), werden null Zeichen zurückgegeben und die Bedingung ist nicht erfüllt. Einfaches Beispiel:
$x = '0';if ($x) { ... } // Bedingung trifft normalerweise nicht zuif (strlen($x)) { ... } // Bedingung ist gültig, da $x 1 Zeichen enthält
Als Nächstes können wir mit der Funktion isset()
testen, ob eine Variable existiert.
Es ist leicht herauszufinden, dass die Saiten identisch sind:
$a = 'Katze';$b = 'Katze';if ($a === $b) {// Wenn die Zeichenketten gleich sind} else {// Wenn die Zeichenketten unterschiedlich sind}
Es ist wichtig, die Datentypen genau im Auge zu behalten, falls der Eintrag mit einem anderen gleichzusetzen ist.
Zum Beispiel ist die leere Zeichenkette $a = '';
anders als die Zeichenkette NULL
: $b = NULL;
. Diese Unterscheidung ist z. B. bei Datenbanken notwendig, wo es einen Unterschied macht, ob ein Wert nicht vorhanden oder leer ist.
$a = '';$b = null;if ($a == $b) {// Es wird als TRUE ausgewertet, weil// der Datentyp wird konvertiert.}if ($a === $b) {// Führt eine viel strengere Validierung durch// und es wird nicht passieren, weil es eine andere// Inhalt und einen anderen Datentyp, daher// Dieser Code wird nie ausgeführt.}
Es ist auch eine gute Idee, weiße (unsichtbare) Zeichen wie Leerzeichen, Tabulatoren und Zeilenumbrüche beim Vergleich von Zeichenketten zu ignorieren. Dies ist z. B. nützlich, wenn Sie ein Kennwort eingeben und es an eine Hash-Funktion weitergeben:
$password = '81dc9bdb52d04dc20036dbd8313ed055'; // 1234$userPassword = '1234';if (md5(trim($userPassword)) === $password) {// Die Funktion trim() löscht automatisch Leerzeichen.}
Manchmal kann es vorkommen, dass der Wert nicht existiert (er ist weder TRUE
noch FALSE
), es handelt sich hauptsächlich um einen Wert, der aus der Datenbank bezogen wird (zum Beispiel fragen wir nach einer Spalte, die nicht existiert), in diesem Fall wird der Datentyp NULL
zurückgegeben.
Im Allgemeinen wird NULL
als FALSE
ausgewertet, d.h. die Bedingung trifft nicht zu. Dieses Verhalten ist jedoch nicht immer zweckmäßig, da ein nicht vorhandener Wert nicht unbedingt bedeutet, dass es keinen Datensatz gibt.
Beispiel aus der Praxis: Wir haben ein Benutzerprofil und fragen die Webseite des Benutzers ab. Nicht alle Benutzer müssen eine Webseite haben, daher wird in diesem Fall
NULL
zurückgegeben, aber der Benutzer existiert noch. In diesem Fall sollten wir also lieber die Funktionisset()
verwenden, um auf das (Nicht-)Vorhandensein der Variablen zu testen und nicht auf der Grundlage eines bestimmten Wertes eine Schlussfolgerung zu ziehen.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | de