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
.
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"; }
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
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.
<form action="ausgabe.php" method="post"> <label>Passwort: <input type="password" name="pw"></label> <button>Senden</button> </form>
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
Teste das "Passwort prüfen" Beispiel zunächst auf deinem Webspace.
Erweitere das "Passwort prüfen" Beispiel anschließend:
Mit der Switch-Anweisung lassen sich quasi mehrere If-Abfragen bündeln, wenn man eine Variable auf unterschiedliche Inhalte abfragen möchte.
$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:
$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.
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 Vorlage verwenden und anpassen.
$_POST
-Variablen zum Rechnen verwendet.
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 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 CC-BY-SA 3.0-de Lizenz.