Abschnitt 2 · Lektion 2
Zeichenketten
Text ist das, womit ein PHP-Programm die meiste Zeit hantiert. Eine Begrüßung, eine Fehlermeldung, eine Zeile HTML, eine Adresse. In PHP heißt so ein Stück Text Zeichenkette, und du schreibst es zwischen Anführungszeichen.
Davon gibt es zwei Sorten, und der Unterschied ist keine Frage des Geschmacks.
Die eine Sorte denkt mit, die andere nicht
In der letzten Lektion stand "Hallo $name!" und heraus kam Hallo Mia!. Das lag nicht am echo,
sondern an den doppelten Anführungszeichen.
<?php
$name = "Mia";
echo "Hallo $name\n";
echo 'Hallo $name\n';
echo "\n";
echo "Fertig\n"; Führ das aus und sieh dir die Ausgabe genau an. Die erste Zeile sagt Hallo Mia. Die zweite sagt
Hallo $name\n, mit Dollarzeichen und mit einem sichtbaren Backslash-n am Ende, und danach geht es
in derselben Zeile weiter.
In doppelten Anführungszeichen tut PHP zwei Dinge für dich. Es ersetzt Variablennamen durch ihren
Wert, und es übersetzt bestimmte Zeichenpaare: \n wird zum Zeilenumbruch, \t zum Tabulator, \\
zu einem einzelnen Backslash. In einfachen Anführungszeichen tut es nichts davon. Dort steht der Text
so da, wie du ihn getippt hast, Zeichen für Zeichen.
Deshalb hat die zweite Zeile im Beispiel keinen Umbruch bekommen. Das \n darin ist kein
Zeilenumbruch, es sind zwei ganz normale Zeichen. Der Umbruch kommt erst durch das echo "\n";
danach, und das ist auch der übliche Weg, wenn du eine Zeile in einfachen Anführungszeichen brauchst.
Die Faustregel: Nimm einfache Anführungszeichen, außer du brauchst etwas, das nur die doppelten
können. Das ist nicht nur eine Frage der Geschwindigkeit, sondern der Vorhersagbarkeit. Zwei Fallen,
die ohne diese Regel irgendwann zuschlagen: "C:\neu" enthält einen Zeilenumbruch, weil \n darin
steckt, und in "Preis ab $betrag" sucht PHP eine Variable, auch wenn du nur ein Dollarzeichen
schreiben wolltest.
Ein Anführungszeichen im Text
Was tust du, wenn der Text selbst Anführungszeichen enthält? Zwei Wege, und du hast beide schon gesehen.
<?php
echo "Sie sagte: \"Guten Tag\"\n";
echo 'Sie sagte: "Guten Tag"';
echo "\n";
echo "Zehn Prozent auf \$50\n"; Der erste Weg ist der Backslash: \" heißt „hier steht ein Anführungszeichen und nicht das Ende der
Zeichenkette”. Der zweite ist einfacher und wird oft übersehen: Nimm die andere Sorte. Ein doppeltes
Anführungszeichen in einer einfach begrenzten Zeichenkette braucht gar nichts, es ist dort ein
gewöhnliches Zeichen.
Dieselbe Überlegung gilt für das Dollarzeichen. In doppelten Anführungszeichen schreibst du \$50,
sonst sucht PHP eine Variable namens $50. In einfachen könntest du $50 direkt schreiben.
Umgekehrt gilt: In einfachen Anführungszeichen haben genau zwei Zeichenpaare eine Bedeutung, \' für
ein Apostroph und \\ für einen Backslash. Alles andere bleibt, wie es ist.
Wo ein Variablenname aufhört
PHP liest den Namen nach dem Dollarzeichen so weit, wie er noch ein gültiger Name sein kann. Meistens
passt das. Bei "$farbees" passt es nicht: Gemeint war $farbe und ein angehängtes es, gesucht
wird aber eine Variable $farbees. Dagegen hilft eine geschweifte Klammer, {$farbe}es. Sie sagt
PHP, wo der Name endet. Mehr dazu in Lektion 3.2, dort geht es ausführlich ums Zusammensetzen.
Umlaute sind keine Kleinigkeit
Deine Dateien in diesem Kurs sind UTF-8, so wie praktisch jede PHP-Datei heute. Umlaute, ein Eszett, ein Euro-Zeichen kannst du also direkt hineinschreiben und wieder ausgeben.
Nur beim Zählen wird es interessant.
<?php
$name = "Müller";
$bytes = strlen($name);
$zeichen = mb_strlen($name);
echo "Name: $name\n";
echo "Bytes: $bytes\n";
echo "Zeichen: $zeichen\n"; Müller hat sechs Buchstaben, aber strlen sagt sieben. Der Grund: strlen zählt keine Zeichen,
sondern Bytes, und ein ü braucht in UTF-8 zwei davon. Für die Zeichen gibt es eine eigene
Funktion, mb_strlen, und die sagt sechs.
Dass das keine Eigenheit von PHP ist, zeigt dir das Terminal: printf 'Müller' | wc -c zählt die
Bytes des Wortes ohne jedes PHP und sagt ebenfalls 7. Und printf 'Müller' | od -c schreibt jedes
Byte einzeln hin; an der Stelle des ü stehen zwei Zahlen, 303 274.
Merk dir für den ganzen Kurs: Überall, wo ein Mensch das Ergebnis zu sehen bekommt, nimmst du die
mb_-Fassung. Eine Namensliste, die nach zwanzig Zeichen abschneidet, würde sonst bei manchen
Namen mitten in einem Umlaut aufhören, und dort steht danach ein Fragezeichen. Beide Funktionen
kommen in Lektion 3.5 wieder, mit ihrer ganzen Verwandtschaft.
Übrigens taucht diese Byte-Zählung in Lektion 2.4 noch einmal auf, an einer Stelle, an der man sie nicht erwartet.
Zum Mitnehmen
Doppelte Anführungszeichen setzen Werte ein und übersetzen Zeichen wie das n hinter dem Backslash. Einfache nehmen alles wörtlich. Das ist keine Geschmacksfrage, das ist der ganze Unterschied.
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 3 Beispielen zum Ausprobieren
Steht hier, ohne Konto lesbar.
-
Aufgabe, dein Code läuft auf einem Server
Öffnet sich mit dem Basis Konto.