Websiteentwicklung: PHP: Kontrollstrukturen

Aus Wikibooks

Einfache Abfragen[Bearbeiten]

Mit if kann man mit Hilfe der Vergleichsoperatoren Werte abfragen und je nachdem etwas bestimmtes ausführen lassen. Das Grundgerüst einer if-Abfrage sieht so aus:

<?php
if (Bedingung) {
    // Anweisung
}
?>

Zuerst kommt ein if mit der Bedingung in Klammern. Gibt diese Bedingung true (wahr) zurück, ist also erfüllt, wird das, was zwischen den beiden geschweiften Klammern steht, ausgeführt. Liefert sie false zurück, ist also nicht erfüllt, überspringt der Interpreter den Teil, der in den geschweiften Klammern steht und arbeitet danach normal weiter. Zu beachten ist, dass in der Zeile mit der Bedingung kein Strichpunkt am Ende steht, ebenso wie bei der geschweiften Klammer zu. Ein Beispiel für eine if-Abfrage:

<?php
if ('Hans' == $benutzername) {
    echo 'Du bist Hans';
}
?>

Dieses Script gibt Du bist Hans aus, wenn die Variable Benutzername gleich Hans ist. Ist dies nicht der Fall, passiert gar nichts.

Bitte beachten Sie: Der Vergleich benutzt in PHP stets zwei Gleichheitszeichen (==). Falsch wäre:

<?php
// ACHTUNG! Falscher Code!
if ($benutzername = 'Hans') {
    echo 'Du bist Hans';
}
?>

In diesem Beispiel würde der Interpreter zunächst der Variablen $benutzername den Wert 'Hans' zuweisen und dann den String prüfen. In diesem speziellen Fall wäre also die Abfrage immer TRUE. Man kann diese Variante allerdings dazu nutzen, eine Zuweisung mit einer Abfrage zu koppeln.

Für den Fall, dass nur eine Anweisung nach der Abfrage folgt, darf man die geschweiften Klammern weg lassen.

if ($a == $b) echo $a;

Typsichere Abfragen[Bearbeiten]

Manchmal ist es notwendig, auch den Datentyp in der Überprüfung zu berücksichtigen. Dafür werden in der Abfrage drei, statt zwei Gleichheitszeichen verwendet.

Beispiel:

if ($benutzername === 'Hans') { // $benutzername muss vom Typ "string" sein
    // Anweisung
}

Else und Elseif[Bearbeiten]

Eine einfache If-Abfrage macht immer, wenn die Bedingung nicht zutrifft, gar nichts. Mit else kann man bestimmen, was passieren soll, wenn die Bedingung nicht zutrifft. Das Grundgerüst einer If-Abfrage mit else sieht so aus:

<?php
if (Bedingung) {
    // Anweisung
} 
else {
    // Anweisung
}
?>

Als Erweiterung für else gibt es elseif. Elseif führt immer dann, wenn die erste Bedingung nicht zutrifft und eine andere Bedingung zutrifft, etwas aus. Das Grundgerüst von Elseif sieht so aus:

<?php
if     (Bedingung) {
    // Anweisung
} 
elseif (Bedingung) {
    // Anweisung
}
?>

Zum Beispiel wollen Sie jetzt eine Abfrage von der Variable Benutzername durchführen. Wenn der Benutzername gleich Hans ist, soll du bist Hans ausgegeben werden, ist er gleich Anton , du bist Anton und ist er anders dich kenne ich nicht:

<?php
if     ('Hans' == $benutzername) {
    echo 'du bist Hans';
} 
elseif ('Anton' == $benutzername) {
    echo 'Du bist Anton';
} 
else {
    echo 'Dich kenne ich nicht';
}
?>
Alternative Schreibweise[Bearbeiten]

Es gibt in PHP eine alternative Schreibweise, die keinerlei besondere Funktion besitzt, aber bei komplexeren Strukturen die Übersicht steigern kann. Bei der Schreibweise wird die Anweisung nach der Abfrage durch einen Doppelpunkt (:) eingeleitet und durch ein "endif" beendet.

if ($a == $b) :
  // Tue irgendwas sinnvolles
endif;

Mit elseif und else wird ebenso umgegangen

if ($a == $b) :
  // Tue was
elseif ($a < $b) :
  // Tue etwas anderes
else :
  // Tue sonstige Sachen
endif;

Der Vorteil liegt bei komplexen Strukturen, wo es teilweise schwer fällt herauszufinden, wozu die geschweifte Klammer am Ende einer Anweisung gehören kann.

if ($a == $b) :
  foreach ($a as $foo) :
    // mach was
  endforeach;
endif;
Trinäre Zuweisung[Bearbeiten]

Eine Besonderheit bildet eine Kurzschreibweise für Abfragen, die ohne elseif auskommen und für if und else jeweils nur eine Rückgabe besitzen.

$foo = $bar ? $wennwahr : $wennfalsch;

In diesem Fall wird geprüft, ob $bar TRUE ist. Sollte $bar TRUE sein, so wird $wennwahr $foo zugewiesen, ansonsten wird $wennfalsch $foo zugewiesen. Interessant ist das für verkürzte Schreibweisen von ansonsten übermäßig komplex anmutenden Abfragen. Eine interessante Anwendung wäre zB, falls eine Variable einen Standard-Wert bekommen soll, falls (und nur dann) die Variable keinen Wert besitzt.

$foo = $foo ? $foo : $standard;
// Gleichbedeutend mit
if (!$foo) $foo = $standard;