PHP Schnellstart – Booleans

In dieser Lektion lernst du alles zum Variablentyp Boolean.

Jede Programmiersprache -- so auch PHP -- verwendet Wahrheitswerte, um das Ergebnis von Aussagen eindeutig festzuhalten und später im Programm verarbeiten zu können, sprich: Entscheidungen fällen zu können. Diese Wahrheitswerte werden auch als Boolesche Werte bezeichnet.

Ein Wahrheitswert einer Aussage ist entweder wahr bzw. richtig oder falsch -- jenachdem ob die untersuchte Aussage zutrifft oder nicht.

PHP kennt dafür die beiden Schlüsselworte true und false, toleriert aber auch die Schreibweise unabhängig von Groß- oder Kleinschreibung.

Wo werden Wahrheitswerte üblicherweise eingesetzt?

(Die nachfolgenden Einsatzmöglichkeiten musst du nicht auswendig können. Es ist jedoch hilfreich sie einmal durchzulesen)

Eingesetzt werden Wahrheitswerte üblicherweise bei den folgenden Situationen:

  • Vergleiche mit den Operatoren "==", "" und "!="
  • haben Variablen einen Wert oder sind diese leer
  • ist ein Zustand erfüllt/wahr (true) oder nicht (false)

PHP setzt false zudem noch in weiteren Fällen ein:

  • eine Variable besitzt den ganzzahligen Wert von 0 oder -0
  • eine Variable besitzt den Fließkommawert 0.0 oder -0.0
  • eine Zeichenkette ist leer
  • eine Zeichenkette besteht aus dem Buchstaben "0"
  • ein Array enthält keine Elemente
  • der besondere Datentyp NULL, den Variablen haben, denen (noch) kein Wert zugewiesen wurde

In den nun folgenden Anwendungsbeispielen lernst Du, wie Du Wahrheitswerte in der Praxis einsetzt.

Festlegen eines Wahrheitswertes

Intern behandelt PHP einen Wert von 0 als false und einen Wert ungleich 0 als true. Das macht die spätere Auswertung recht einfach.

Das erste Beispiel zeigt, wie Du einen Wahrheitswert festlegst. Am Einfachsten erfolgt das als direkte Wertzuweisung einer Variable. Die erste Anweisung weist der Variable $bildAngeschaut den Wert false zu, die zweite Anweisung der Variable $dateiAbgespeichert den Wert true.


$bildAngeschaut = false;
$dateiAbgespeichert = true;

Ebenfalls kannst Du das Ergebnis eines Vergleichs verwenden, wie hier zu sehen ist:


$vergleich = ($anzahlBilder > 10);

Erklärung: Zuerst wertet PHP den Vergleich $anzahlBilder > 10 aus und weist danach das Ergebnis daraus der Variable $vergleich zu. Enthält die Variable $anzahlBilder einen Wert größer als zehn, ergibt der Vergleich $anzahlBilder > 10 den Wahrheitswert true und ansonsten false. Der Variable $vergleich wird danach das Ergebnis des Vergleichs zugewiesen.

Hinweis: Ich habe diese Lektion verkürzt, um dir die wichtigsten Grundlagen zu Booleans zu zeigen. Falls du in die Tiefe des Themas gehen möchtest und dich schon grundlegend mit If/Else-Abfragen auskennen solltest, kannst du hier klicken:

[lp_spoiler title="Booleans für Fortgeschrittene - Die gesamte Lektion anzeigen" class="da"]

Einen Wahrheitswert auswerten

Weiter oben hast Du einer Variable $bildAngeschaut bereits den Wert false zugeordnet. Mit einer if-Anweisung wie prüfst Du diesen Wert wie folgt:


if ($bildAngeschaut) {
echo "Das Bild wurde bereits angeschaut."
} else {
echo "Das Bild wurde noch nicht angeschaut."}

Die Ausgabe ist in diesem Fall "Das Bild wurde noch nicht angeschaut.", da die Variable $bildAngeschaut den Wert false besitzt.

Ganz ähnlich funktioniert es auch nächsten Beispiel. Hier überprüfst Du, ob die Variable $zahl einen Wert größer als 0 besitzt. Die Aussage des Vergleichs $zahl > 0 ist wahr, weshalb in Folge die Anweisungen im if-Block ausgeführt werden und der Text "Der Wert von $zahl ist größer als 0." ausgegeben wird.


$zahl = 3;
if ($zahl > 0) {
echo "Der Wert von $zahl ist größer als 0."
}

Funktionen mit Wahrheitswert als Rückgabewert

Zur üblichen Programmierpraxis gehört, dass Funktionen Wahrheitswerte zurückgeben. PHP hat solche Funktionen bereits eingebaut, wie zum Beispiel diese hier:

  • is_dir($dateiname) : Liefert true zurück, wenn $dateiname ein
    Verzeichnis und keine Datei ist, ansonsten false.
  • >is_readable($dateiname) : Liefert true zurück, wenn $dateiname existiert und eine lesbare Datei ist, ansonsten false.
  • is_writable($dateiname) : Liefert true zurück, wenn $dateiname existiert und eine schreibbare Datei ist, ansonsten false.
  • in_array($suchwert, $werteliste) : Liefert true zurück, wenn sich der Suchwert im Array $werteliste befindet, ansonsten false.

Du kannst bspw. die Funktion is_writable() wie folgt aufrufen:


$dateiname = "test.txt";
if (is_writable($dateiname)) {
echo "Die Datei $dateiname ist schreibbar';
} else {
echo "Die Datei $dateiname ist nicht schreibbar';
}

Um selbst eine Funktion zu definieren, die einen Wahrheitswert zurückgibt, hilft Dir das nachfolgende Beispiel. Festgelegt wird eine Funktion namens testeFarbwertRot(), die als einzigen Parameter eine Zeichenkette akzeptiert und den Wert true zurückgibt, falls der an die Funktion übermittelte Parameter den Wert rot beinhaltet.


function testeFarbwertRot($farbe) {
# lege Standard-Rückgabewert fest: false
$ergebnis = false;

# prüfe zuerst den Parameter auf Zeichenkette
if (is_string($farbe)) {
# prüfe Zeichenkette auf den Wert "rot"
if ($farbe == "rot") {
# setze Ergebnis auf true, da der Farbwert stimmt
$ergebnis = true;
}
}

return $ergebnis;
}

Diese Funktion rufst Du nun wie folgt auf:


if (testeFarbwertRot("rot") {
echo "Farbwert ist rot";
}

Um eine ganze Menge von Farbwerten zu testen, kannst Du ein Array mit Farbwerten wie folgt verwenden und darauf die zuvor definierte Funktion anwenden:


$listeDerFarbwerte = array("rot", "gelb", "blau", "schwarz");
foreach ($listeDerFarbwerte as $farbwert) {
if testeFarbwertRot($farbwert) {
echo "Der Farbwert ist rot.
";
} else {
echo "Der Farbwert ist nicht rot, sondern $farbwert.
";
}
}

Das Ergebnis des Aufrufs ist nun die folgende Ausgabe:


Der Farbwert ist rot.
Der Farbwert ist nicht rot, sondern gelb.
Der Farbwert ist nicht rot, sondern blau.
Der Farbwert ist nicht rot, sondern schwarz.

Fortgeschrittene Programmierer werden einwenden, dass obige Funktion etwas umständlich ist. Ja, sie haben recht. Die Funktion zeigt im Detail, wie der Vergleich mit Wahrheitswerten funktioniert.

PHP bringt die Funktion in_array() mit, die Vergleiche mit Listen vereinfacht. Verwendest Du diese Funktion, kannst Du mit dem nachfolgenden Programmcode testen, ob sich der Farbwert "rot" überhaupt in der Liste befindet. Die Funktion in_array() gibt nämlich den Wahrheitswert true zurück, falls die Bedingung erfüllt ist, ansonsten false.


$listeDerFarbwerte = array("rot", "gelb", "blau", "schwarz");
if (in_array("rot", $listeDerFarbwerte)) {
echo "rot ist in der Liste der Farbwerte enthalten";
}
if (in_array("violett", $listeDerFarbwerte)) {
echo "violett ist nicht in der Liste der Farbwerte enthalten";
}

Der Ergebnis ist diese Ausgabe hier:


rot ist in der Liste der Farbwerte enthalten
violett ist nicht in der Liste der Farbwerte enthalten

Mitunter wird auch der umgekehrte Fall benötigt -- der Test auf Nicht-Enthaltensein in einer Liste. Dazu gibt es zwei Möglichkeiten, das zu schreiben. Variante eins ist diese hier. Es vergleicht dabei den Rückgabewert der Funktion is_array() mit dem Wahrheitswert false. Falls der Vergleich stimmt, wird der Text ausgegeben.


$listeDerFarbwerte = array("rot", "gelb", "blau", "schwarz");
if (in_array("violett", $listeDerFarbwerte) == false) {
echo "violett ist nicht in der Liste der Farbwerte enthalten";
}

Variante zwei verwendet den logischen Operator not für die Negation eines Wahrheitswertes wie folgt:


$listeDerFarbwerte = array("rot", "gelb", "blau", "schwarz");
if not (in_array("violett", $listeDerFarbwerte)) {
echo "violett ist nicht in der Liste der Farbwerte enthalten";
}

Falls sich der Wert "violett" nicht in der Liste $listeDerFarbwerte befindet, liefert die Funktion in_array() als Ergebnis false zurück. Der Operator not negiert nun diesen Wert und wandelt das false zu true um. Die if-Anweisung prüft diesen Wert auf Richtigkeit, findet "ja, trifft zu", und führt die Anweisungen im if-Block aus, sprich: in unserem Fall nur die echo-Anweisung.

Wahrheitswerte miteinander kombinieren

Wie Du bereits oben gesehen hast, kam der logische Operator not für die Negation eines Wahrheitswertes zum Einsatz. Das geht auch für weitere Operatoren:

  • AND: $a AND $b liefert true, falls beide Einzelwerte wahr sind. Die
    Alternativschreibweise für AND ist &&.
  • OR: $a OR $b liefert true, falls mindestens einer der beiden Einzelwerte wahr ist. Die Alternativschreibweise für OR ist ||.
  • XOR: $a XOR $b liefert true, falls nur einer der beiden Einzelwerte wahr ist, aber nicht beide Werte.
  • NOT: !$a liefert true, falls $a falsch ist.

Das nachfolgende Beispiel zeigt, wie Du überprüfen kannst, ob sich mindestens einer der beiden Farbwerte "rot" und "blau" in der Liste der Farben befindet.


if (in_array("rot", $listeDerFarbwerte) OR in_array("blau", $listeDerFarbwerte)) {
echo "rot oder blau befinden sich in der Farbliste";
}

Bitte beachte dabei die verkürzte Ausführung des Vergleichs. Falls der erste Vergleich in_array("rot", $listeDerFarbwerte) bereits true ergibt, ändert das nichts mehr am Gesamtergebnis und der zweite Vergleich in_array("blau", $listeDerFarbwerte) wird nicht mehr durchgeführt. Andersherum formuliert, der zweite Vergleich wird nur dann ausgeführt, wenn der erste Vergleich als Ergebnis false geliefert hat. Möchtest Du, dass beide Tests auf Enthaltensein des Farbwertes in der Liste ausgeführt werden, musst Du zwei separate if-Anweisungen schreiben.

[/lp_spoiler]

 

Deine Aufgabe - Jetzt bist du gefragt:

Im untenstehenden Editor findest Du eine einfache Übung zu Booleans.

Du stehst am Gepäckband der Airline und bist bereit für den Flug auf die Bahamas. Doch anscheinend hast du zu viel Gepäck mit. Ups, 45 kg Gepäck sind nicht erlaubt ($koffer = 45).

Deine Aufgabe ist es den Wert der Variable $koffer (Zeile 4) so zu ändern, dass das Skript nach dem Ausführen den Text "True" ausgibt.

Hinweis: Den Code ab Zeile 6 musst du derzeit nicht verstehen und auch nicht anpassen. Er dient nur der Veranschaulichung.

Code-Editor:

Fazit zu Booleans

Die beiden Wahrheitswerte true und false sind essentiell, um überhaupt Entscheidungen mit Hilfe von Verzweigungen in Programmen zu ermöglichen. Der Umgang damit ist die Grundlage für komplexeren Programmcode. Das waren die wichtigsten Grundlagen dazu. Mit Booleans wirst du auch in den kommenden Lektionen immer wieder arbeiten.

In der nächsten Lektion beschäftigen wir uns mit Arrays.