4. Unterrichtsblock

PHP Switch-Anweisung

Die switch-Anweisung wird verwendet, um verschiedene Aktionen basierend auf verschiedenen Bedingungen auszuführen. Die switch-Anweisung zählt neben der if-else-Anweisung daher zu den „bedingten Anweisungen“.

Hier wird die switch-Anweisung verwendet, um einen von vielen auszuführenden Codeblöcken auszuwählen .

/*
  SYNTAX
*/

switch (n) {
  case fall1:
  auszuführendes programm wenn n=fall1;
    break;
  case fall2:
  auszuführendes programm wenn n=fall2;
    break;
  case fall3:
  auszuführendes programm wenn n=fall3;
    break;
    ...
  default:
  auszuführendes programm wenn keiner der o.g. fälle zutrifft;
}

Erklärung:

  • Zuerst haben wir einen einzelnen Ausdruck n (meistens eine Variable), der einmal ausgewertet wird. 
  • Der Wert des Ausdrucks wird anschließend mit den Werten für jeden Fall (case) in der Struktur verglichen. 
  • Wenn es zu einer Übereinstimmung kommt, wird der diesem Fall zugeordnete Codeblock ausgeführt. 
  • Die Option break wird verwendet, um zu verhindern, dass der Code automatisch in den nächsten Fall übergeht. Die default-Anweisung wird verwendet, wenn keine Übereinstimmung gefunden wird.
<?php
/*
Beispiel beim Abgleich der Lieblingsfarbe
*/

$lieblingsfarbe = "rot";

switch ($lieblingsfarbe) {
  case "rot":
    echo "Die Lieblingsfarbe ist rot.";
    break;
  case "blau":
    echo "Die Lieblingsfarbe ist blau.";
    break;
  case "grün":
    echo "Die Lieblingsfarbe ist grün.";
    break;
  default:
    echo "Die Lieblingsfarbe ist weder rot, blau oder grün.";
}
?>

Aufgaben Einfach

Aufgabe 1: Unterschiede
Trage die Unterschiede und Gemeinsamkeiten zur Switch-Anweisung von JavaScript zusammen und erkläre diese in eigenen Worten.

Aufgabe 2: O.g. Beispiel nachbauen:
Erstelle ein HTML-Formular in welchem über ein Dropdown-Formular eine Farbe ausgewählt werden kann und vergleiche die Eingabe nach Übermittlung durch eine switch-Anweisung. Nutze dabei o.g. Code-Beispiel.

Aufgaben Fortgeschritten

Aufgabe 1: Wochentag ausgeben
Ziel: Schreibe ein PHP-Skript, das anhand einer Zahl den entsprechenden Wochentag ausgibt.

  1. Erstelle eine PHP-Datei und schreibe ein Skript.
  2. Definiere eine Variable $tag mit einem Wert zwischen 1 und 7.
  3. Verwende eine switch/case-Anweisung, um den entsprechenden Wochentag (Montag bis Sonntag) für die Zahl auszugeben.

Aufgabe 2: Einfache Taschenrechner-Funktion
Ziel: Schreibe ein PHP-Skript, das eine einfache Taschenrechner-Funktion basierend auf einer Operation (Addition, Subtraktion, Multiplikation, Division) ausführt.

  1. Erstelle eine PHP-Datei und schreibe ein Skript.
  2. Definiere drei Variablen: $nummer1, $nummer2 und $operation.
  3. Verwende eine switch/case-Anweisung, um die entsprechende mathematische Operation basierend auf dem Wert von $operation auszuführen und das Ergebnis anzuzeigen.

PHP Funktionen

Die wahre Stärke von PHP liegt in seinen Funktionen. PHP hat mehr als 1000 eingebaute Funktionen und zusätzlich können eigene benutzerdefinierten Funktionen erstellt werden.

Eingebaute PHP-Funktionen

PHP hat über 1000 eingebaute Funktionen, die direkt innerhalb eines Skripts aufgerufen werden können, um eine bestimmte Aufgabe auszuführen. Einen Überblick zu allen eingebauten PHP-Funktionen gibt es auf folgender Seite: https://www.w3schools.com/php/php_ref_overview.asp

Benutzerdefinierte PHP-Funktionen

Neben den eingebauten PHP-Funktionen ist es möglich, eigene Funktionen zu erstellen.

  • Eine Funktion ist ein Block von Anweisungen, die in einem Programm wiederholt verwendet werden können.
  • Eine Funktion wird nicht automatisch ausgeführt, wenn eine Seite geladen wird.
  • Eine Funktion benötigt einen Aufruf um ausgeführt zu werden.

Erstellung von benutzerdefinierten Funktionen

Eine benutzerdefinierte Funktionsdeklaration beginnt mit dem Wort function:

Syntax

function funktionsName() {
  auszuführendes programm;
}

Hinweis: Ein Funktionsname muss mit einem Buchstaben oder einem Unterstrich beginnen. Bei Funktionsnamen wird die Groß-/Kleinschreibung NICHT beachtet.

Tipp: Man gibt der Funktion einen Namen, der widerspiegelt, was die Funktion ausführen soll.

Im folgenden Beispiel wird eine Funktion mit dem Namen „begruessung()“ erstellt. Die öffnende geschweifte Klammer ( { ) gibt den Beginn des Funktionscodes an, und die schließende geschweifte Klammer ( } ) zeigt das Ende der Funktion an. Die Funktion gibt „Hallo Welt!“ aus. Um die Funktion aufzurufen, schreibt man einfach den Namen gefolgt von Klammern ():

<?php
function begruessung() {
  echo "Hallo Welt!";
}

begruessung(); // Funktionsaufruf
?>

PHP-Funktionsargumente

Informationen können über Argumente an Funktionen übergeben werden. Ein Argument ist hierbei wie eine Variable.

Argumente werden nach dem Funktionsnamen innerhalb der Klammern angegeben. Man kann beliebig viele Argumente hinzufügen. Diese sind einfach durch ein Komma zu trennen

Das folgende Beispiel hat eine Funktion mit einem Argument ($fname). Beim Aufruf der Funktion familienName() übergeben wir auch einen Namen (z. B. Müller), und der Name wird innerhalb der Funktion verwendet, die mehrere verschiedene Vornamen, aber einen gleichen Nachnamen ausgibt:

<?php
function familienName($fname) {
  echo "$fname Maxi.<br>";
}

familienName("Müller");
familienName("Mayer");
familienName("Schmidt");
familienName("Bauer");
familienName("Metzger");
?>

Das folgende Beispiel hat eine Funktion mit zwei Argument ($fname und $jahr):

<?php
function familienName($fname, $jahr) {
  echo "$fname Maxi. Geburtsjahr: $jahr <br>";
}

familienName("Müller", "1975");
familienName("Mayer", "1978");
familienName("Schmidt", "1983");
?>

PHP war bis PHP 8 eine lose typisierte Sprache

Im obigen Beispiel ist zu beachten, dass wir PHP nicht mitteilen mussten, welcher Datentyp die Variable ist.

PHP ordnet der Variablen abhängig von ihrem Wert automatisch einen Datentyp zu. Da die Datentypen nicht im engeren Sinne festgelegt werden, konnte man in PHP 7 Dinge wie das Hinzufügen einer Zeichenfolge zu einer Ganzzahl tun, ohne einen Fehler zu verursachen.

Seit PHP 8 ist dies jedoch nicht mehr so.

PHP strict-Deklaration in PHP 7

In PHP 7 wurden die Typdeklarationen hinzugefügt. Dies ermöglicht es, den erwarteten Datentyp beim Deklarieren einer Funktion anzugeben. Durch das Hinzufügen der strict Deklaration wird anschließend ein „Fatal Error“ ausgegeben, wenn der Datentyp nicht übereinstimmt.

Um zu prüfen, welche PHP Version verwendet wird, kann die Funktion phpversion() verwendet werden.

<?php
// Im folgenden Beispiel wird versucht, sowohl eine Zahl als auch einen String an die Funktion zu senden, ohne strict:
function erhalteNummern(int $a, int $b) {
  return $a + $b;
}
echo erhalteNummern(5, "5 Tage");
// Da Strict NICHT aktiviert ist, wird (bis zur Version PHP 8.0) "5 Tage" in int (5) geändert
// und es wird 10 zurückgegeben
// Seit PHP 8 funktioniert dies nicht mehr

// Prüfung der PHP Version:
echo 'Aktuelle PHP-Version: ' . phpversion() . ' <br>' ;
?>

Aufgabe

  1. Probiere o.g. Codebeispiel aus
  2. Recherchiere PHP_EOL – wofür wird es verwendet?

Aufgabe 1: Begrüßungsfunktion
Ziel: Schreibe eine Funktion, die einen Namen als Argument entgegennimmt und eine personalisierte Begrüßung ausgibt.

  1. Erstelle eine PHP-Datei und schreibe ein Skript.
  2. Definiere eine Funktion namens begrüßung, die ein Argument $name entgegennimmt.
  3. Die Funktion soll eine personalisierte Begrüßung ausgeben, z.B. „Hallo, [Name]!“.
  4. Rufe die Funktion mit verschiedenen Namen auf.

Aufgabe 2: Addiere zwei Zahlen
Ziel: Schreibe eine Funktion, die zwei Zahlen als Argumente entgegennimmt und ihre Summe zurückgibt.

  1. Erstelle eine PHP-Datei und schreibe ein Skript.
  2. Definiere eine Funktion namens addiere, die zwei Argumente $zahl1 und $zahl2 entgegennimmt.
  3. Die Funktion soll die Summe der beiden Zahlen berechnen und zurückgeben.
  4. Rufe die Funktion mit verschiedenen Zahlenpaaren auf und gib die Ergebnisse aus.

Um strict zu spezifizieren, muss declare(strict_types=1); gesetzt werden. Dies muss in der allerersten Zeile der PHP-Datei stehen.

Im folgenden Beispiel versuchen wir, sowohl eine Zahl als auch einen String an die Funktion zu senden, aber hier haben wir die strict Deklaration hinzugefügt:

<?php declare(strict_types=1); // strict Anforderung

function erhalteNummern(int $a, int $b) {
  return $a + $b;
}
echo erhalteNummern(5, "5 Tage");
// Da Strict aktiviert ist und "5 Tage" keine Ganzzahl ist, wird ein Fehler ausgegeben
?>

Merke: Die strict-Deklaration erzwingt die beabsichtigte Verwendung von Dingen.

PHP-Standardargumentwert

Das folgende Beispiel zeigt, wie ein Standardparameter verwendet wird. Wenn wir die Funktion setzeHoehe() ohne Argumente aufrufen, nimmt sie den Standardwert als Argument:

<?php 
function setzeHoehe(int $minhoehe = 50) {
  echo "Die Höhe ist: $minhoehe <br>";
}

setzeHoehe(350);
setzeHoehe(); // Verwendet den Standardwert 50
setzeHoehe(135);
setzeHoehe(80);
?>

PHP-Funktionen – Werte zurückgeben

Um den Wert einer Funktion zurück zu erhalten, verwendet man die return-Anweisung:

<?php 

function summe(int $x, int $y) {
  $z = $x + $y;
  return $z;
}

echo "5 + 10 = " . summe(5, 10) . "<br>";
echo "7 + 13 = " . summe(7, 13) . "<br>";
echo "2 + 4 = " . summe(2, 4);
?>

Aufgabe

  1. Probiere o.g. Codebeispiel aus
  2. Was kommt heraus, wenn return weggelassen wird?

Deklarationen von PHP-Rückgabetypen

PHP 7 unterstützt auch Typdeklarationen für die return-Anweisung. Wie bei der Typdeklaration für Funktionsargumente wird durch die Aktivierung der strict-Anforderung ein „Fatal Error“ bei einem Typkonflikt ausgelöst.

Um einen Typ für die Funktionsrückgabe zu deklarieren, fügt man beim Deklarieren der Funktion einen Doppelpunkt ( : ) und den Typ direkt vor der öffnenden geschweiften Klammer ( { ) hinzu.

Im folgenden Beispiel geben wir den Rückgabetyp für die Funktion an:

<?php 

function erhalteNummern(float $a, float $b) : float {
  return $a + $b;
}
echo erhalteNummern(1.2, 5.2);
?>

Man kann einen anderen Rückgabetyp als die Argumenttypen angeben, sollte aber sicherstellen, dass die Rückgabe der richtige Typ ist:

<?php 

function erhalteNummern(float $a, float $b) : int {
  return (int)($a + $b);
}
echo erhalteNummern(1.2, 5.2);
?>

Aufgabe

  1. Probiere beide o.g. Codebeispiele aus
  2. Was kommt heraus, wenn die return-Rückgabedeklarationen weggelassen, oder vertauscht werden?

Argumente per Referenz übergeben

In PHP werden Argumente normalerweise als Wert übergeben, was bedeutet, dass eine Kopie des Werts in der Funktion verwendet wird und die an die Funktion übergebene Variable nicht geändert werden kann.

Wenn ein Funktionsargument als Referenz übergeben wird, ändern Änderungen am Argument auch die übergebene Variable. Um ein Funktionsargument in eine Referenz umzuwandeln, wird der &-Operator verwendet:

<?php
function addiere_fuenf(&$wert) { // Hier wird ein Referenz-Argument verwendet, um eine Variable zu aktualisieren
  $wert += 5;
}

$nummer = 2;
addiere_fuenf($nummer);
echo $nummer;
?>

Aufgabe

Probiere o.g. Codes aus, um ein Gefühl hierfür zu bekommen.

Übungsaufgaben

1. Aufgabe

Erstelle eine Datei test.php und führe verschiedene Programme aus o.g. Beispielen durch. Verwende dabei verschiedene:

  • Switch
  • Funktionen
  • Baue ein Programm, welches die PHP-eigene isset()-Funktion für Variablen verwendet und eine Anweisung durchführt, wenn eine bestimmte Variable existiert