Abschnitt 2 · Lektion 5
Wahrheitswerte und null
Manche Werte sind keine Zahl und kein Text, sondern eine Antwort auf eine Ja-oder-Nein-Frage. Ist der
Besucher angemeldet? Ist der Artikel lieferbar? Wurde das Formular abgeschickt? Dafür hat PHP eine
eigene Sorte mit genau zwei Werten: true und false.
Dazu kommt ein dritter Wert, der leicht mit ihnen verwechselt wird: null.
true und false sind Werte, keine Wörter
true und false schreibst du ohne Anführungszeichen. Sie sind keine Namen und kein Text, sondern
Werte wie 42, und sie passen genauso in eine Variable.
<?php
$angemeldet = true;
$gesperrt = false;
echo "angemeldet: $angemeldet\n";
echo "gesperrt: $gesperrt\n";
var_dump($angemeldet);
var_dump($gesperrt); Und hier siehst du sofort, warum diese Lektion hinter der letzten steht. echo macht aus true eine
1, und aus false macht es gar nichts. Die zweite Zeile der Ausgabe endet also hinter dem
Doppelpunkt, und was dort steht, könnte auch ein leerer Text sein, eine Null oder eine Variable, die
es nie gab.
var_dump sagt dagegen klar bool(true) und bool(false). Für alles, was in dieser Lektion kommt,
ist es deshalb das einzig brauchbare Werkzeug.
null heißt: hier ist nichts
null ist nicht null im Sinne der Zahl. Es ist die Antwort auf eine Frage, die nie beantwortet wurde.
Der Unterschied klingt spitzfindig und ist im Alltag sehr konkret. 0 heißt „hier ist eine Zahl, und
sie ist null”. "" heißt „hier ist ein Text, und er ist leer”. null heißt „hier ist überhaupt
nichts”. Ein Formularfeld, in das jemand nichts eingetippt hat, liefert einen leeren Text. Ein Feld,
das gar nicht abgeschickt wurde, liefert nichts. Das eine ist eine Angabe, das andere ist keine, und
in Abschnitt 11 wird dieser Unterschied für dich zur täglichen Arbeit.
Was PHP für falsch hält
Jetzt kommt der Teil, der Anfängern die meiste Zeit kostet, und deswegen steht er hier als Liste zum Nachschlagen und nicht als Rätsel zum Herleiten.
Wenn PHP an einer Stelle ein Ja oder Nein braucht, du ihm aber etwas anderes gibst, dann entscheidet
es selbst. Mit (bool) in Klammern kannst du diese Entscheidung sichtbar machen: Das heißt „sag mir,
was du daraus machen würdest, wenn du wahr oder falsch bräuchtest”.
<?php
echo 'false: '; var_dump((bool) false);
echo 'die Zahl 0: '; var_dump((bool) 0);
echo 'die Zahl 0.0: '; var_dump((bool) 0.0);
echo 'leerer Text: '; var_dump((bool) "");
echo 'der Text "0": '; var_dump((bool) "0");
echo 'leeres Array: '; var_dump((bool) []);
echo 'null: '; var_dump((bool) null); Das ist die vollständige Liste. Sieben Fälle, mehr gibt es nicht: false selbst, die Zahl 0,
die gebrochene 0.0, der leere Text, der Text "0", ein leeres Array und null. Ein Array ist eine
Liste von Werten, die kommt erst in Abschnitt 5, für heute reicht die leere Klammer als
Platzhalter.
Alles andere ist wahr. Und weil das schnell gesagt und schwer geglaubt ist, hier die Fälle, die regelmäßig für Überraschung sorgen.
<?php
echo 'der Text "0.0": '; var_dump((bool) "0.0");
echo 'der Text "false": '; var_dump((bool) "false");
echo 'ein Leerzeichen: '; var_dump((bool) " ");
echo 'die Zahl -1: '; var_dump((bool) -1);
echo 'Array mit einer 0: '; var_dump((bool) [0]); Der Text "0.0" ist wahr, obwohl die Zahl 0.0 falsch ist. Der Text "false" ist wahr, obwohl er
das Gegenteil behauptet. Ein einzelnes Leerzeichen ist wahr, denn es ist ja ein Zeichen. Eine -1
ist wahr, denn nur die Null ist falsch, nicht „kleiner als eins”. Und ein Array mit einer Null darin
ist wahr, weil es eben nicht leer ist.
Der einzige Fall, den man sich wirklich merken muss, ist der Text "0". Alle anderen ergeben sich
aus dem Grundgedanken „leer oder null ist falsch”. Dass ausgerechnet die Zeichenkette mit einer Null
darin mitgezählt wird, ist eine Entscheidung aus der Frühzeit von PHP, und du wirst ihr in Abschnitt
11 wiederbegegnen, wenn ein Formularfeld die 0 als Text liefert.
Was ein Programm mit wahr und falsch anfängt, kommt in Abschnitt 4. Dort lernst du if, und
dort wird aus dieser Liste eine Regel mit Wirkung. Heute geht es nur darum, sie einmal gesehen zu
haben, damit dich dort nichts überrascht.
isset und empty stellen zwei verschiedene Fragen
Zwei Funktionen tauchen im PHP-Alltag ständig auf, und sie werden ständig verwechselt.
<?php
$leer = "";
$nichts = null;
echo 'isset($leer): '; var_dump(isset($leer));
echo 'empty($leer): '; var_dump(empty($leer));
echo 'isset($nichts): '; var_dump(isset($nichts));
echo 'isset($garnicht): '; var_dump(isset($garnicht));
echo 'empty($garnicht): '; var_dump(empty($garnicht));
echo "fertig\n"; isset() fragt: Gibt es diesen Wert überhaupt, und ist er etwas anderes als null? Ein leerer Text
besteht diese Prüfung, denn er existiert ja. null besteht sie nicht.
empty() fragt etwas anderes: Ist dieser Wert einer aus der Liste von oben? Für einen leeren Text
lautet die Antwort ja, deshalb sagen beide Funktionen bei $leer dasselbe, aber aus verschiedenen
Gründen.
Und jetzt der Punkt, der sie so nützlich macht: Sieh dir den Fehlerkanal an. Er ist leer. $garnicht
gibt es nicht, und trotzdem gibt es keine Warnung, anders als bei dem echo in Lektion 2.1. Beide
Funktionen dürfen nach etwas fragen, das es nicht gibt, und genau dafür sind sie gemacht.
Als Faustregel: isset(), wenn du wissen willst, ob eine Angabe da ist. empty(), wenn dir egal ist,
warum sie fehlt, und du nur wissen willst, ob etwas Brauchbares drinsteht.
Zum Mitnehmen
PHP hält den Text 0 für falsch und den Text 0.0 für wahr. Diese Liste kostet mehr Anfängerstunden als jede Regel über Klammern und Semikolons.
Jetzt du
Basis Konto, kostenlosZu dieser Lektion gehört eine Aufgabe. Du schreibst den Code selbst, und nach jedem Lauf sagt dir eine Prüfliste, was schon stimmt.
Dafür brauchst du das Basis Konto. Es kostet nichts, und ein Passwort gibt es auch nicht.
In diesem Kurs läuft dein Code auf einem Server. Dafür hat das Basis Konto 1 Stunde im Monat, mehr Zeit gibt es mit dem Premium Konto.
Was in dieser Lektion steckt
-
Artikel mit 4 Beispielen zum Ausprobieren
Steht hier, ohne Konto lesbar.
-
Aufgabe, dein Code läuft auf einem Server
Öffnet sich mit dem Basis Konto.