====== Verzweigungen ======
Wie praktisch alle Programmiersprachen mit imperativen Sprachkonzepten bietet auch 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 ======
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. Dies ist ein Anweisungsblock, der innerhalb von geschweiften Klammern notiert und zur besseren Lesbarkeit eingerückt wird.
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.
| Normierte Sprache | Programmiersprache |
| WENN ( Schraube ist darunter ) DANN aufheben *ENDE DANN SONST ablegen *ENDE SONST
| if (istAufGegenstand("Schraube")) { aufnehmen(); } else { ablegen("Schraube"); }
|
**Codebeispiel:**
$haben = 10;
$limit = 20;
if($haben > $limit) {
// gibt Ergebnis aus
print "Einkaufen gehen";
}
else {
print "Nicht einkaufen gehen";
}
===== Exkurs: Logische Operationen =====
Vergleichsoperatoren erlauben es - wie der Name schon sagt - zwei Werte miteinander zu vergleichen. Die wesentliche Eigenschaft von Vergleichsoperationen ist, dass es nur zwei mögliche Ergebnisse gibt: WAHR und FALSCH. Diese beiden Möglichkeiten nennt man auch "Wahrheitswerte". **Jede ''Vergleichsoperation'' liefert also einen der beiden Wahrheitswerte //Wahr// oder ''Falsch'' zurück**.
**Beispiele:**
3 == 5 liefert FALSCH
4 == 4 liefert WAHR
3 < 3 liefert FALSCH
3 <= 3 liefert WAHR
Es gibt eine ganze Anzahl von Vergleichsoperatoren für, verschiedene Datentypen, einen Überblick gibt das PHP Handbuch: [[http://www.php.net/manual/de/language.operators.comparison.php]]
Vergleiche können darüber hinaus noch logisch vernüpft werden, z.B. so:
4 == 5 ODER 3 == 3 liefert WAHR
denn bei der Verknüpfung mit ODER reicht es, wenn eine der beiden Vergleichsoperationen WAHR ist. Man kann dazu eine Wahrheitstabelle aufstellen:
^ ODER ^^ (PHP Notation ''||'') ^
| ''A'' | ''B'' | ''A||B'' |
| WAHR | WAHR | WAHR |
| WAHR | FALSCH | WAHR |
| FALSCH | WAHR | WAHR |
| FALSCH | FALSCH | FALSCH |
**Optionale Aufgabe**
Erstelle für jeder der logischen Operatoren eine solche Wahrheitstabelle: [[http://php.net/manual/de/language.operators.logical.php]]
===== Experiment: Passwort prüfen =====
Wir legen (in einem neuen Unterverzeichnis, z.B. "passwort") zwei neue Dateien an, ''eingabe.html'' und ''ausgabe.php'':
Zunächst 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.
Zur Verarbeitung legen wir die Datei ''ausgabe.php'' an, die unsere vom Formular übermittelten Informationen verarbeitet:
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.
Achtung: 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.
----
{{:aufgabe.png?nolink |}}
=== (A1) ===
Teste das "Passwort prüfen" Beispiel zunächst auf deinem Webspace.
Erweitere das "Passwort prüfen" Beispiel anschließend:
* Ermittle mit der "date" Funktion von PHP die Stunde der aktuellen Uhrzeit [[.hilfe:01|Hilfe]].
* Baue im Zweig mit dem korrekten Passwort noch eine Unterscheidung ein, so dass der Benutzer je nach Tageszeit anders begrüßt wird (z.B. "Guten Morgen" bis 12:00 Uhr, "Guten Tag" ab 12 Uhr).
====== Mehrfachverzweigung mit switch ======
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.
----
{{:aufgabe.png?nolink |}}
=== (A2) ===
Ergänze das Taschenrechner-Beispiel oben durch ein Formular, so dass du im Unterverzeichnis ''taschenrechner'' auf deinem Webspace einen funktionierenden Taschenrechner erhältst. Du kannst die {{..:eingabe:vorlage_eingabe_2dateien.zip|Vorlage}} verwenden und anpassen.
* Erstelle zunächst das passende Formular in einer HTML Datei (3 Eingabefelder).
* Verändere das case-Beispiel so, dass es die entsprechenden ''$_POST''-Variablen zum Rechnen verwendet.
----
{{:aufgabe.png?nolink |}}
=== (A3) ===
Implementiere einen "Mitternachtsformel" Rechner mit einem Formular mit 3 Eingabefeldern und einer entsprechenden PHP-Verarbeitungsdatei. Welches ist das Unterscheidungskriterium für die case Anweisung? Du kannst die {{..:eingabe:vorlage_eingabe_2dateien.zip|Vorlage}} verwenden und anpassen.
----
Die Inhalte dieser Seite sind den PHP Einsteiger Tutorials auf https://wiki.selfhtml.org/wiki/PHP/Tutorials/Einstieg entlehnt und stehen unter einer [[https://creativecommons.org/licenses/by-sa/3.0/de/|CC-BY-SA 3.0-de]] Lizenz.