PHP/Tutorials/Kontrollstrukturen

Aus SELFHTML-Wiki
< PHP‎ | Tutorials
Wechseln zu: Navigation, Suche

Verzweigungen[Bearbeiten]

Wie in vielen anderen Programmiersprachen auch bietet PHP Sprachelemente, sogenannte Kontrollstrukturen, um Verzweigungen zu realisieren. Dazu zählen die einfache Verzweigung mit if und die mehrfache Verzweigung mit switch.

Einfachverzweigung mit if/else[Bearbeiten]

Mit der sogenannten if-Anweisung (if, engl. für „wenn“) kann man eine Bedingung prüfen. Das Sprachkonstrukt (es ist keine Funktion) wird mit dem Schlüsselwort if notiert, gefolgt von einem Paar runder Klammern, in dem eine Bedingung notiert wird. Diese Bedingung wird nach dem "Wenn-Dann-Prinzip" geprüft. Wenn sie zutrifft, dann soll etwas bestimmtes passieren.

Für den Fall, dass die Bedingung nicht erfüllt ist, kann man einen Alternativzweig mit dem Schlüsselwort else (else, engl. für „ansonsten“) festlegen.

Beispiel: einfache Verzweigung mit if
$haben = 10;
$limit = 20;

if($haben > $limit) {
  print "Einkaufen gehen";
}
else {
  print "Nicht einkaufen gehen";
}

In diesem Beispiel haben wir zwei Variablen, eine mit dem Wert 10 und eine mit 20. Die If-Anweisung überprüft ob $haben größer $limit ist. Ist das der Fall dann schreibt PHP »Einkaufen gehen«. Um jetzt keine zweite If-Anweisung schreiben zu müssen, die den gegenteiligen Fall abdeckt, gibt es die else-Anweisung. Wenn also $haben kleiner oder gleich $limit ist dann schreibt PHP »Nicht einkaufen gehen«.

In unserem Beispiel also: Wenn $haben größer als $limit dann schreibe »Einkaufen gehen« ansonsten schreibe »Nicht einkaufen gehen«.

Beachten Sie: Geschweiften Klammern (sie fassen einen Anweisungsblock zusammen), wie hier um den Aufruf der print-Funktion herum, sollten Sie bei Verzweigungen immer notieren, auch wenn sie bei nur einer einzelnen Anweisung prinzipiell entfallen könnten. Es hat sich in der Praxis aber als hilfreich erwiesen, wenn Sie diese grundsätzlich notieren, da in diesem Fall eine spätere Erweiterung keine unerwarteten Programmverläufe produziert.

Experiment: Passwort prüfen[Bearbeiten]

Wir legen zwei neue Dateien an, eingabe.html und ausgabe.php:

Beispiel: eingabe.html
<form action="ausgabe.php" method="post">
 <label>Passwort: <input type="password" name="pw"></label>
 <button>Senden</button>
</form>

Wir erstellen ein neues Formular, welches eingegebene Daten an ausgabe.php versenden wird. In das Passwortfeld müssen wir später unser Passwort eintragen und mit dem Button das Formular abschicken.

Beispiel: ausgabe.php
if ($_POST["pw"] == "test") {
  print "Herzlich Willkommen im geschützten Bereich";
}
else {
  print "Falsches Passwort";
}

Per if-Anweisung überprüfen wir, ob das eingegebene Passwort dem Wert »test« entspricht, wenn ja, dann hat man Zutritt zum geschützten Bereich, ansonsten nicht.

Beachten Sie: Die Passwort-Prüfung ist in der vorliegenden Form noch keine sinnvolle Lösung für eine Zugangsbeschränkung (daher das "Experiment:" im Titel). Hier muss bei jedem Seitenaufruf das Passwort erneut eingegeben und das Formular abgeschickt werden um an die geschützten Inhalte zu gelangen. Weiterführende Hinweise zu dieser Problematik bietet der Artikel Sicherheit/Zugriffsschutz.

Mehrfachverzweigung mit switch[Bearbeiten]

Mit der Switch-Anweisung lassen sich quasi mehrere If-Abfragen bündeln, wenn man eine Variable auf unterschiedliche Inhalte abfragen möchte.

Beispiel: Mehrfachverzweigung mit switch
$a = 30;
$b = 12;
$op = "-";

switch ($op){
    case "+":
        echo "$a plus $b ergibt: ", $a + $b;
        break;
    case "-":
        echo "$a minus $b ergibt: ", $a - $b;
        break;
    case "*":
    case "x":
        echo "$a mal $b ergibt: ", $a * $b;
        break;
    case "/":
    case ":":
        echo "$a durch $b ergibt: ", $a / $b;
        break;
    default:
        echo "Das Rechenzeichen '$op' ist mir unbekannt.";
}

Mit dem Schlüsselwort switch wird die Struktur eingeleitet. In runden Klammern wird ein Ausdruck notiert (hier eine Variable), der zu prüfen ist.

Die einzelnen Fallunterscheidungen werden mit der Kombination aus case und break notiert. Nach dem Schlüsselwort case steht ein Wert, gefolgt von einem Doppelpunkt. Danach folgen beliebig viele Anweisungen, die für diesen Fall gelten. Mit dem Schlüsselwort break (unbedingt mit abschließendem Semikolon!) wird der jeweilige Fall abgeschlossen.

Das Schlüsselwort default (default, engl. Vorgabe) ist für alle die Fälle gemeint, die keinem der notierten Fälle entsprechen, weshalb hier kein Wert vor dem Doppelpunkt notiert wird. In diesem Code-Beispiel steht es an letzter Stelle, weshalb auf das abschließende break verzichtet werden kann.

Folgt einem case kein break, so werden alle nachfolgenden Anweisungen der folgend notierten Fälle abgearbeitet, bis wieder ein break steht. Damit kann man Anweisungen zusammenfassen:


Beispiel: Mehrfachverzweigung mit "Durchrutschen"
$note = 1;

echo "Sie haben eine ";

switch ($note){
    case 1:
        echo "sehr ";
    case 2:
        echo "gute ";
    default:
        echo "Note ";
}

echo $note," bekommen.";
// Ergebnisse
// $note = 1: "Sie haben eine sehr gute Note 1 bekommen."
// $note = 2: "Sie haben eine gute Note 2 bekommen."
// $note = 3: "Sie haben eine Note 3 bekommen."
Das Fehlen von break nach jedem case führt dazu, dass alle folgenden echo-Anweisungen ausgeführt werden.

Schleifen[Bearbeiten]

Mit Schleifen lassen sich Programmblöcke wiederholen.

Hinweis

Achten Sie darauf, Endlosschleifen zu vermeiden!

Beispiel
$count = 1;
while($count < 4)
{
  echo 'Blabla';
}
Die Abbruchbedingung (Variable count >= 4) kann niemals erreicht werden, deshalb läuft die Schleife also endlos, bis irgendein Timeout greift.

For-Schleife[Bearbeiten]

Die For-Schleife wird verwendet, wenn eine bestimmte Anzahl an Durchläufen benötigt wird

Beispiel
for($a = 10; $a < 20; $a++ ) {
  echo $a;
}

For-Each-Schleife[Bearbeiten]

Sie wird verwendet, wenn alle Elemente eines Arrays behandelt werden sollen.

Beispiel
$einArray = array(1, 2, 3, 4);

foreach ($einArray as $Wert) {
    echo $Wert;
}

While-Schleifen[Bearbeiten]

Schleifen, die eine Abbruchbedingung prüfen, nennt man While-Schleifen. While heißt "Solange", d.h. die Schleife wird solange wiederholt, wie die Bedingung "wahr" ist.

Beispiel
while (true) {
    echo "1";
}
Hier haben wir eine Endlosschleife, die solange eine Eins ausgibt, wie das Universum existiert.


Diese normale While-Schleife ist eine sogenannte kopfgesteuerte Schleife, sie prüft die Bedingung, bevor sie überhaupt in den Schleifenkörper hineingeht. Dagegen führt die Do-While-Schleife den Schleifenkörper mindestens einmal aus, bevor die Bedingung geprüft wird.


Beispiel
do {
    echo "1";
}
while (false)
Hier wird nur einmal eine Eins ausgegeben.

siehe auch (PHP-Handbuch)[Bearbeiten]