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:

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)

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)

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

Hier fehlt noch ein Eintrag!