Anweisungen
Ein PHP-Skript besteht aus einer Abfolge von Anweisungen, die auch Statements genannt werden. Anweisungen enden in
der Regel mit einem Semikolon.
Eine Anweisung kann eine Zuweisung, ein Funktionsaufruf, eine bedingte Anweisung, oder sogar eine Anweisung die
nichts tut (eine leere Anweisung) sein.
Anweisungen können in Anweisungsblöcken zusammengefasst werden indem sie in geschweifte Klammern eingeschlossen
werden {}.
Anweisungsblöcke werden für Verzweigungen, Schleifen und Funktionen verwendet.
<?php
// Das ist eine Anweisung
echo "Hallo Welt!";
?>
Ausdruck
PHP besteht im Prinzip nur aus Anweisungen und Ausdrücken. Anweisungen werden auch Statements und Ausdrücke werden
auch Expressions genannt.
Es ist nicht immer klar ersichtlich, ob es sich um einen Ausdruck oder eine Anweisung handelt. Die einfachste,
aber auch zutreffendste
Definition für einen Ausdruck bzw. einer Anweisung ist:
- Eine Anweisung macht etwas
- Ein Ausdruck berechnet etwas
Das folgende Beispiel beschreibt die Syntax eines if-Konstruktes. Die Bedingung des Konstruktes ist ein Ausdruck.
if (expression)
statement
echo-Anweisung
Der wichtigste Befehl, der Ihnen bei PHP über den Weg laufen wird, ist der echo-Befehl oder -Anweisung.
echo bietet die Möglichkeit, Werte im HTML auszugeben. Diese Werte können Text, Zahlen oder Variablen sein.
Der Text, der ausgegeben werden soll, muss natürlich in Anführungsstrichen stehen, dieses Vorgehen wird Quoten
oder Quoting genannt.
Die echo-Anweisung hat eine Funktions-Ähnliche Syntax, der Parameter kann daher auch in Klammern stehen.
Die echo-Anweisung ist aber nicht wirklich eine Funktion sondern ein Sprach-Konstrukt, daher ist es nicht
notwendig, Klammern zu verwenden.
<?php
echo "Hallo Welt!";
echo ('Hallo Welt!');
echo 5 + 5;
?>
Quoting
Den Unterschied zwischen double oder single quoting wurde in diesem Script schon mehrfach behandelt:
- Bei den doppelten Anführungsstrichen versucht der Server, den Text zu interpretieren
- Bei den einfachen hingegen behandelt er ihn nicht speziell, sondern gibt ihn direkt aus
<?php
$myName = "Adi Prinz";
echo "Mein Name ist $myName";
echo "<br>";
echo 'Mein Name ist $myName';
?>
Die Punkt Syntax
Mit dem Zeichenkettenoperator, dem einfachen Punkt (.), kann man Strings aneinander hängen. Das heißt, dass der
Ausdruck "Adi " . "Prinz" die Zeichenkette "Adi Prinz" zurückliefert.
Dies gilt genauso für Stringwerte, die in Variablen gespeichert sind. Auch auf Werte, die keine Strings sind, kann
der Punkt-Operator angewendet werden. PHP wandelt die
Operanden des Punkt-Operators in den Typ String um.
<?php
$myName = "Adi Prinz";
echo 'Mein Name ist ' . $myName;
?>
Die Argumente Syntax
Die echo-Anweisung kennt auch die Argumente-Syntax. dabei können Argumente mit einem Komma getrennt werden. Das
Klammernpaar () darf in diesem Fall nicht verwendet werden.
<?php
$firstName = "Adi";
$lastName = "Prinz";
echo "Mein Name ist ",$firstName," ",$lastName;
?>
print-Anweisung
Neben dem echo-Befehl gibt es auch den print-Befehl. Im Endeffekt leisten beide dasselbe, sie geben Text aus. Ein
paar Unterschiede gibt es aber dennoch;
- print kennt keine Argumente-Syntax
- Der Konditionaloperator gibt nur Werte mit print zurück
<?php
$wert = 0;
$wert == 0 ? print "Wert ist 0" : print "Wert ist nicht 0";
?>
Diese Konstruktion wertet eine Bedingung aus und führt entsprechend dem Ergebnis den ersten oder zweiten Teil aus.
Es kommt zwar nur auf die Ausgabe an, die Konstruktion erwartet aber Rückgabewerte, der Raum zwischen ? : und ;
darf aus syntaktischen Gründen nicht leer sein. Hier darf also niemals ein echo stehen.
Kontrollstrukturen
Beim Programmieren mit PHP möchte man oft Anweisungen, abhängig von Bedingungen auszuführen.
Bedingte Anweisungen oder auch Verzweigungen genannt, und Schleifen bieten sich dafür an.
PHP bezeichnet solche Konstrukte auch als Kontrollstrukturen.
Bedingte Anweisungen (Verzweigungen)
Ob eine Anweisungen ausgeführt wird, hängt bei Verzweigungen von einer oder mehreren Bedingungen ab.
Je nachdem, ob die Bedingung zutrifft, werden die entsprechenden Anweisungen ausgeführt oder nicht.
PHP kennt folgende bedingte Anweisungen:
- if-Anweisung
- if-else-Anweisung
- if-elseif-Anweisung
- switch-case-Anweisung
Die if-Anweisung
Die Syntax lautet:
if (expression)
statement
// oder
if (expression) {
statement
statement
}
Das if-Konstrukt macht das Ausführen einer Anweisung von einer Bedingung abhängig.
<?php
$a = 5;
$b = 2 + 2;
if ($a > $b)
echo "a ist größer als b";
?>
Wenn Statement einzeilig ist, kann auf die geschweiften Klammern verzichtet werden. Bei mehrzeiligen Statements
müssen geschweifte Klammern
geschrieben sein.
<?php
$a = 5;
$b = 2 + 2;
if ($a > $b) {
echo "a ist größer als b";
$b = $a;
}
?>
Die if-else-Anweisung
Die Syntax lautet:
if (expression) {
statement
} else {
statement
}
Die zweite Form der if-Anweisung führt den else-Teil ein, der ausgeführt wird, wenn die Bedingung nicht erfüllt,
also der Ausdruck false ist.
<?php
$a = 5;
$b = 2 + 2;
if ($a > $b) {
echo "a ist größer als b";
} else {
echo "a ist nicht größer als b";
}
?>
Die if-elseif-Anweisung
Die Syntax lautet:
if (expression) {
statement
} elseif (expression) {
statement
}
Mit der if-elseif-Anweisung können mehrere Bedingungen geprüft werden. Der else-Zweig am Ende der Anweisung kann,
muss aber nicht vorkommen.
<?php
$a = 5;
$b = 2 + 2;
if ($a > $b) {
echo "a is größer als b";
} elseif ($a == $b) {
echo "a ist gleich groß wie b";
} else {
echo "a ist kleiner als b";
}
?>
Alternative Schreibweise
PHP bietet eine alternative Syntax für if-Konstrukte an,
dabei werden öffnende Klammern durch einen Doppelpunkt (:) ersetzt. Den Abschluss des Konstruktes bildet endif und
ein Semikolon.
Die Syntax lautet:
if (expression):
statement
elseif (expression):
statement
else:
statement
endif;
Die switch-case-Anweisung
Eine Alternative zur if-elseif-Anweisung stellt die switch-Anweisung dar. Sie ermöglicht ebenfalls eine
Mehrfachverzweigung, jedoch wirkt der Code wesentlich übersichtlicher
und trägt zum besseren Verständnis bei.
Die Syntax lautet:
<?php
switch (expression) {
case label1:
statement
break;
case label2:
statement
break;
...
default:
statement
}
?>
Es dreht sich auch hierbei wieder alles um den Ausdruck (expression), der in der Regel eine Variable ist. Der
default-Teil wird ausgeführt, wenn keiner der vorherigen Werte zutrifft.
Dieser Teil der switch-Anweisung ist optional.
Jeder Programmblock muss mit dem Kommando break abgeschlossen werden, damit die switch-Anweisung nicht unnötig
weiter durchlaufen wird,
wenn es zu einer Übereinstimmung mit einer der case-Werte kommt.
<?php
$a = 1;
switch ($a) {
case 0:
echo "a ist gleich 0";
break;
case 1:
echo "a ist gleich 1";
break;
default:
echo "a ist weder 0 noch 1";
break;
}
?>
Es können mehrere Vergleiche hintereinander ausgeführt werden, die Operanden sind quasi Oder-verknüpft:
<?php
$a = 1;
switch ($a) {
case 0: case 1: case 2:
echo "a ist zwischen 0 und 2";
break;
case 3: case 4: case 5:
echo "a ist zwischen 3 und 5";
break;
default:
echo "a ist nicht zwischen 0 und 5";
break;
}
?>
Auch switch kennt eine alternative Schreibweise, dabei wird die öffnende Klammer mit einem Doppelpunkt (:)
ersetzt.
Den Abschluss des Konstruktes bildet endswitch und ein Semikolon.
Die Syntax lautet:
<?php
switch (expression):
case label1:
statement
break;
case label2:
statement
break;
...
default:
statement
endswitch;
?>
Schleifen
Falls sich innerhalb eines Programmes einzelne Anweisungen oder Blöcke von Anweisungen wiederholen, werden Schleifen
verwendet. In PHP gibt es grundsätzlich
zwei Möglichkeiten dazu:
while-Schleifen, falls die Anzahl der Wiederholungen dem Programmierer nicht bekannt ist, sondern die Schleife
aufgrund einer Bedingung wiederholt bzw. abgebrochen wird (bedingungsgesteuerte Schleife)
- while-Schleife
- do-while-Schleife
for-Schleifen, falls die Anzahl der Wiederholungen dem Programmierer bekannt ist oder sie sich eindeutig im Verlauf
des Programmes vor der Schleife ergibt (Zähl-Schleife)
- for-Schleife
- foreach-Schleife
Die while-Schleife
Die while-Schleife durchläuft Statement mehrfach, solange die Bedingung WAHR ist. Wenn die Bedingung FALSCH ist
wird die Schleife beendet.
Die Syntax lautet:
while (bedingung) {
statement
}
Im folgenden Beispiel läuft die Schleife solange bis $i kleiner Zehn (10) ist. Bei jedem Durchlauf wird $i um 1
inkrementiert.
<?php
$i = 0;
while ($i < 10) {
echo $i . "<br>";
$i++;
}
?>
Auch while kennt eine alternative Schreibweise, dabei wird die öffnende Klammer mit einem Doppelpunkt (:) ersetzt.
Den Abschluss des Konstruktes bildet endwhile und ein Semikolon.
Die Syntax lautet:
while (bedingung):
statement
endwhile;
Die do-while-Schleife
Die do-while-Schleife ist der while-Schleife sehr ähnlich. Der einzige Unterschied besteht darin, dass die
Schleifenbedingung nicht am Anfang, sondern am Ende der Schleife überprüft wird. Deshalb führt die
do-while-Schleife mindestens einen Durchlauf aus.
Die do-while-Schleife kennt keine alternative Schreibweise.
Die Syntax Lautet:
do {
statement
} while (bedingung);
Im folgenden Beispiel läuft die Schleife solange bis $i kleiner Zehn (10) ist. Bei jedem Durchlauf wird $i um 1
inkrementiert.
<?php
$i = 0;
do {
echo $i . "<br>";
$i++;
} while ($i < 10);
?>
Die for-Schleife
Normalerweise gibt es eine Schleifenvariable, die vor Beginn der Schleife initialisiert wird. Vor jedem
Schleifendurchlauf wird der Wert dieser Variablen innerhalb des Ausdrucks überprüft. Schließlich wird sie am Ende
der Schleife, unmittelbar vor der erneuten Auswertung des Ausdrucks, inkrementiert oder in anderer Weise geändert.
Sie hat außerdem den Vorzug, dass die Initialisierung, der Ausdruck (Bedingung) und die Veränderung der
Schleifenvariablen übersichtlich im Kopf der Schleife zusammengefasst sind.
Die for-Schleife kennt auch eine alternative Schreibweise.
Die Syntax lautet:
for ($counter; bedingung; increment) {
statement
}
//Alternativ
for ($counter; bedingung; increment):
statement
endfor;
Alle drei Parameter der for-Schleife sind äußerst flexibel einsetzbar. So sind die drei Parameter der for-Schleife
optional. Ohne eine Iterationsvariable (counter)
wird die Schleife endlos durchlaufen. Parameter werden mit einem Semikolon getrennt.
<?php
$i = 0;
for ($i; $i < 10; $i++) {
echo $i . "<br>";
}
?>
Weitere Beispiele für eine for-Schleife
Das folgende Beispiel zeigt, dass Parameter einer for-Schleife optional sind. Den Abbruch der Schleife bestimmt
nicht die Bedingung, sondern die
if-Anweisung und break innerhalb der Schleife.
<?php
$i = 1;
for (;;) {
if ($i > 10) {
break;
}
echo $i . "<br>";
$i++;
}
?>
Der flexible Umgang mit den Schleifenparametern kennt praktisch keine Grenzen. Auch das folgende Beispiel ist
syntaktisch korrekt:
<?php
for ($i = 0, $j = 10; $i < $j; $i++) {
$j--;
echo "i ist jetzt: $i <br>";;
echo "j ist jetzt: $j <br>";
}
?>
Es spielt offensichtlich keine Rolle, ob hier Variablen zum Einsatz kommen oder nicht. Wenn Sie beispielsweise
lediglich eine Liste ausgeben wollen, können Sie den Befehl recht knapp halten:
<?php
for ($i = 1; $i <= 10; print $i . "<br>", $i++);
?>
Die foreach-Schleife
Die foreach-Schleife funktioniert nur in Verbindung mit Arrays und Objekten.
Beim Versuch, foreach mit einer Variablen eines anderen Datentyps zu benutzen, gibt PHP einen Fehler aus.
Die foreach-Schleife kennt zwei Schreibweisen.
Die Syntax lautet:
foreach (array_expression as $value)
statement
// oder
foreach (array_expression as $key => $value)
statement
Mithilfe von foreach wird das Durchlaufen eines Arrays wesentlich vereinfacht. Gegenüber der while-Schleife mit
list und each ist die foreach-Schleife syntaktisch deutlich im Vorteil.
<?php
$zahlen = array (10, 20, 30, 40);
// Beispiel – while
while (list(, $value) = each ($zahlen)) {
echo "Wert: $value<br>";
}
// Beispiel – foreach
foreach ($zahlen as $value) {
echo "Wert: $value<br>";
}
?>
Die foreach-Schleife durchläuft das Array. Bei jedem Durchlauf wird der Wert des aktuellen Elementes der Variable
$value zugewiesen. Die Variable $value kann
irgendein Name sein.
Die foreach-Schleife hat einen internen Array-Zeiger der bei jedem Durchlauf um eins erhöht wird (womit im
nächsten Durchlauf das nächste Element betrachtet wird).
Im nächsten Beispiel durchläuft die foreach-Schleife Schleife ein assoziatives Array, dabei kommen die
Hilfsvariablen $key und $value zum Einsatz.
$key repräsentiert den Schlüssel des Arrays und $value den Wert des Array-Eintrags. Beide Variablennamen sind auch
frei wählbar.
<?php
$person = array("firstName" => "Adi",
"lastName" => "Prinz",
"age" => 25,
"place" => "Salzburg");
foreach ($person as $key => $val) {
echo "Feld $key hat den Wert: $val<br>";
}
?>
Weitere Kontrollstrukturen
PHP kennt noch weitere Kontrollstrukturen, die meistens in Verbindung mit Verzweigungen oder Schleifen benutzt
werden.
Folgende, weitere Kontrollstrukturen stehen zur Verfügung:
break
Die break-Anweisung darf nur innerhalb von
for-, foreach, while-, do-while- oder switch-Anweisungen
verwendet werden. Bei der break-Anweisung wird die aktuell ausgeführte Schleife verlassen.
Diese Anweisung wird normalerweise dazu verwendet, eine Schleife vorzeitig zu beenden.
Im folgenden Beispiel wird die Schleife abgebrochen, nachdem der Wert 5 erreicht ist.
<?php
$a = 1;
while ($a <= 10) {
echo $a . "<br>";
if ($a == 5) {
break;
}
$a++;
}
?>
continue
Die continue-Anweisung steht mit der break-Anweisung in einem sehr engen Zusammenhang. Wie schon die
break-Anweisung, kann auch continue nur innerhalb von for-,
foreach, while-, do-while- oder switch-Anweisungen verwendet werden. Wenn die continue-Anweisung ausgeführt wird,
wird der aktuelle Durchlauf der ausgeführten
Schleife beendet und die nächste Iteration begonnen. Die continue-Anweisung verhält sich dabei in jeder
Schleifenart unterschiedlich.
- In einer while-Schleife weist continue den Interpreter an, den restlichen
Teil der Schleife zu übergehen und an den Anfang der Schleife zu springen, wo
die Bedingung geprüft wird.
- In einer do-while-Schleife weist continue den Interpreter an, den restlichen
Teil der Schleife zu übergehen und an das Ende der Schleife zu springen, wo die Bedingung geprüft wird.
- In einer for-Schleife weist continue den Interpreter an, den restlichen Teil
der Schleife zu übergehen und zur Auswertung des auf die for-Schleife folgenden Ausdrucks zu springen.
- In einer foreach-Schleife weist continue den Interpreter an, den restlichen
Teil der Schleife zu übergehen und zurück an den Anfang der Schleife zu springen, wo der nächste Wert in der
Aufzählung verarbeitet wird.
<?php
$a = 1;
while ($a <= 10) {
echo $a . "<br>";
$a++;
continue;
echo "Ich werde nie aufgerufen";
}
for ($i = 0; $i < 5; ++$i) {
if ($i == 2)
continue;
echo $i . "<br>";
}
?>
goto
Die goto-Anweisung kann innerhalb eines Programs zu einer anderen Anweisung springen (Sprungmarke). Die
Sprungmarke wird mit einem benutzerdefinierten Namen definiert.
Die Sprungmarke muss in der selben Datei und im selben Kontext liegen, d.h. dass weder aus einer Funktion oder
Methode herausgesprungen werden kann,
noch in sie hineingesprungen. Weiterhin kann nicht in eine Schleifen- oder switch-Anweisung hineingesprungen
werden. Es ist jedoch möglich aus diesen hinauszuspringen.
Die Zielsprungmarke besteht aus dem Namen und einem Doppelpunkt(:).
<?php
for ($i = 0; $i < 5; ++$i) {
if ($i == 2)
goto marke;
echo $i . "<br>";
}
echo "Ich werde übersprungen";
marke:
echo "Ich werde ausgeführt.";
?>
Verschachtelte Kontrollstrukturen
Verschachtelte Kontrollstrukturen sind ein wesentliches Konzept in der Programmierung und ermöglichen es,
komplexe Logik durch die Kombination verschiedener Kontrollstrukturen wie Schleifen und bedingte Anweisungen zu
realisieren.
In PHP können Sie if-Anweisungen, Schleifen und switch-Anweisungen ineinander verschachteln, um detaillierte
logische Abläufe zu implementieren.
Hier sind einige Beispiele für verschachtelte Kontrollstrukturen in PHP:
<?php
// Beispiel 1: Verschachtelte if-Anweisungen
$age = 20;
$hasPermission = true;
if ($age >= 18) {
if ($hasPermission) {
echo "Zugang gewährt.";
} else {
echo "Zugang verweigert. Keine Erlaubnis.";
}
} else {
echo "Zugang verweigert. Zu jung.";
}
?>
<?php
// Beispiel 2: Verschachtelte Schleifen
for ($i = 1; $i <= 3; $i++) {
echo "Äußere Schleife Iteration: $i<br>";
for ($j = 1; $j <= 2; $j++) {
echo " - Innere Schleife Iteration: $j<br>";
}
}
?>
// Beispiel 3: Schleifen in bedingten Anweisungen
<?php
$numbers = [1, 2, 3, 4, 5];
$searchNumber = 3;
$found = false;
foreach ($numbers as $number) {
if ($number == $searchNumber) {
$found = true;
break;
}
}
if ($found) {
echo "Nummer $searchNumber gefunden.";
} else {
echo "Nummer $searchNumber nicht gefunden.";
}
?>
// Beispiel 4: Verschachtelte switch-Anweisungen
<?php
$day = "Montag";
$hour = 10;
switch ($day) {
case "Montag":
switch ($hour) {
case 9:
echo "Es ist Montag, 9 Uhr.";
break;
case 10:
echo "Es ist Montag, 10 Uhr.";
break;
default:
echo "Es ist Montag, aber nicht 9 oder 10 Uhr.";
break;
}
break;
case "Dienstag":
echo "Es ist Dienstag.";
break;
default:
echo "Es ist weder Montag noch Dienstag.";
break;
}
?>
// Beispiel 5: Komplexere verschachtelte Strukturen
<?php
$users = [
["name" => "Alice", "role" => "admin", "age" => 30],
["name" => "Bob", "role" => "editor", "age" => 22],
["name" => "Charlie", "role" => "subscriber", "age" => 17],
];
foreach ($users as $user) {
if ($user['role'] == 'admin') {
echo $user['name'] . " ist ein Admin.<br>";
} elseif ($user['role'] == 'editor') {
if ($user['age'] >= 18) {
echo $user['name'] . " ist ein volljähriger Editor.<br>";
} else {
echo $user['name'] . " ist ein minderjähriger Editor.<br>";
}
} else {
echo $user['name'] . " ist ein Abonnent.<br>";
}
}
?>
Erläuterung der Beispiele
-
Verschachtelte if-Anweisungen:
Im ersten Beispiel wird geprüft, ob eine Person mindestens 18 Jahre alt ist. Wenn ja, wird innerhalb dieser
Bedingung weiter geprüft, ob sie eine Erlaubnis hat.
-
Verschachtelte Schleifen:
Das zweite Beispiel zeigt eine äußere for-Schleife, die dreimal durchläuft, und eine innere for-Schleife, die
zweimal pro äußere Schleifeniteration durchläuft.
-
Schleifen in bedingten Anweisungen:
Im dritten Beispiel wird eine foreach-Schleife verwendet, um ein Array zu durchlaufen und innerhalb dieser
Schleife eine Bedingung geprüft.
-
Verschachtelte switch-Anweisungen:
Das vierte Beispiel zeigt eine switch-Anweisung, die einen weiteren switch-Block innerhalb eines Falles enthält.
-
Komplexere verschachtelte Strukturen:
Das fünfte Beispiel kombiniert foreach, if, und elseif, um verschiedene Benutzerrollen und Altersgruppen zu
unterscheiden und entsprechende Nachrichten auszugeben.