1. Datentyp Boolean
In PHP gibt es einen Datentyp der theoretisch nur ein einzelnes Bit
Speicherplatz benötig. Mit einem Bit können nur die zwei
verschiedenen Wert 0
und 1
dargestellt werden.
In Programmiersprachen spricht man eher von den Werten true
(für 1)
und false
(für 0). Dieser Datentyp wird dazu verwendet um
zu sagen ob etwas stimmt oder nicht. Umgs. sagt man etwas ist wahr
oder etwas ist falsch.
In PHP werden die Programmcodes true
und false
verwendet
um die entsprechenden boolischen Werte darzustellen. Groß- und Kleinschreibung
ist dabei egal, jedoch wird oft die kleingeschriebene Schreibweise verwendet.
<?php
$var = true;
$var2 = false;
$var3 = TRUE;
$var4 = FaLsE;
$var5 = 'true'; // dies ist der 4 zeichen lange String 'true', nicht der boolische wert true
?>
In PHP-Skripten wird dieser Datentyp für Kontrollstrukturen verwendet. Dadurch wird entschieden welcher Programmteil in einem Skript ausgeführt wird und welcher nicht.
2. Kontrollstrukturen
Kontrollstrukturen in PHP werden dazu verwendet den Programmfluss zu steuern. Die Steuerung ist dabei die Frage ob ein Programmcode ausgeführt werden soll oder nicht. Dazu verwendet man den Sprachkonstrukt if. Der Aufbau ist dabei wie folgt.
<?php
if (ausdruck) anweisung
?>
Der Ausdruck wird von PHP verarbeitet und muss einen Wert zurückliefern. Dieser
wird dann geprüft ob er dem boolischen Wert true
entspricht. Wenn
dies der Fall ist wird die folgende Anweisung ausgeführt. In den seltesten Fällen
will man eine einzelne Anweisung steuern, daher gruppiert man mehrere
Anweisungen mit den geschweiften Klammern {
und }
zusammen.
<?php
if (ausdruck) {
anweisung_1;
anweisung_2;
// ...
anweisung_n;
}
?>
Der zu prüfende Ausdruck kann dabei auch aus mehreren Ausdrücken zusammengesetzt werden,
die dann mit den gängigen logischen Verknüpfungen and
, or
!
und xor
verbunden werden.
3. Alternative Ausführung
Wenn man nun Programmteile mit einer if-Abfrage steuert möchte
man manchmal auch einen alternativen Programmteil aufrufen falls die if-Abfrage nicht
aufgerufen wurde. Bei einem Login heißt dies z.B. Wenn der Login gültig ist zeige
den Adminbereich, sonst zeige das Loginformular. In PHP wird dies
mit dem Schlüsselwort else
realisiert, welches zu einem vorherigen
if
gehören muss.
<?php
if (login_gueltig) {
// zeige adminbereich
} else {
// zeige loginformular
}
?>
Analog könnte man auch ein neue if-Abfrage hinzufügen und den Ausdruck negieren.
<?php
if (login_gueltig) {
// zeige adminbereich
}
if (!login_gueltig)
// zeige loginformular
}
?>
Dieser Programmierstil ist jedoch nicht zu empfehlen und kann in manchen Fällen sogar gar nicht möglich sein.
So eine alternative Programmausführung kann sogar mit elseif Strukturen erweitert werden. Dies ist ein Block der zwischen den if- und else-Block eingefügt wird und auch ein Ausdruck zum kontrollieren enthält.
<?php
if (cond) {
// tu was
} elseif (andere_cond) {
// mach jenes
} else {
// mach dies
}
?>
Dieser elseif Teil wird dann ausgeführt/geprüft wenn die vorherige If-Abfrage false
ergab. Es können dabei auch mehrere elseif-Teile verwendet werden.
<?php
if (cond) {
// tu was
} elseif (andere_cond) {
// mach jenes
} elseif (und_andere_bedingung) {
// mach das
} elseif (bedingung) {
// php-code
} else {
// mach dies
}
?>
Die Bedingung die zuerst eintrifft wird dann ausgeführt und nur diese. Wenn keine Bedingung zutrifft wird der else-Teil ausgeführt.
4. Stolperfalle if();
Auch wenn if ()
aussieht wie ein Funktionsaufruf, es ist keiner. Ein Semikolon
am Ende ist nicht nur fehlplaziert sondern unterbindet auch die korrekte Arbeitsweise die
eigentlich erwartet wird. Als Beispiel nehmen wir folgenden Quellcode.
<?php
if (false); // <-- man beachte das ;
echo 'Foobar';
?>
Obwohl die Bedingung false
ist wird die echo-Anweisung ausgeführt.
Die If-Abfrage steuert nur die nächste Anweisung bzw. den nächsten Programmblock innerhalb von
geschweiften Klammern. In diesem Fall ist es nicht die echo 'Foobar';
Zeile sondern
das einzelne ;
hinter der If-Abfrage. Der Quellcode sieht eigentlich wie
folgt aus.
<?php
if (false)
;
echo 'Foobar';
?>
Oder um es noch deutlicher zu machen.
<?php
if (false) {
;
}
echo 'Foobar';
?>
Hier sieht man das die If-Abfrage nur eine leere Anweisung steuert, die Echo-Anweisung ist davon unberührt.