Variablen und Texte verketten

In PHP müssen häufig die Inhalte von mehreren Variablen und/oder Texten ausgegeben werden. Angenommen, man möchte die Datumsangabe in der Form Wochentag, den TT.MM.JJJJ ausgeben, z.B. Montag, den 15.09.2015. Wenn man davon ausgeht, dass der Wochentag und das Datum Variablen sind und der übrige Text (, den) ein normaler Text, dann könnte man für die Ausgabe mit echo den folgenden Code verwenden.

<?php echo $wochentag; ?>, den <?php echo $datum; ?>

Verkettungsoperator . (Punkt) verwenden

Eine elegangere Lösung ist, die Variablen und/oder Texte zu verketten. Als Verkettungsoperator verwendet man einen Punkt.

<?php echo $wochentag . ', den ' . $datum; ?>

Mit dieser Variante hat man nur noch eine PHP-Anweisung. Diese Art der Verkettung nennt man in der Programmierung auch Konkatenation (concatenation). Die einzelnen Bestandteile sind dabei mit Punkten verkettet worden, die als Verkettungsoperator dienen. Dabei ist es egal, ob vor und nach den Punkten Leerzeichen sind. Der folgende Code wäre ebenfalls korrekt.

<?php echo $wochentag.', den '.$datum; ?>

Man kann diese Art der Zusammensetzung nicht nur für die Ausgabe mit echo benutzen, sondern den Inhalt einer Variable festlegen. Mit dem folgenden Code würde man den Inhalt der Variable $var zuweisen.

<?php $var = $wochentag . ', den ' . $datum; ?>

Variablen erweitern

Mit einem Punkt als Verkettungsoperator kann man Variablen beliebig erweitern, indem man die Variable selbst als Teil des neuen Werts verwendet. Beim folgenden Code wird die Variable $var1 mit der Variable $var2 erweitert.

$var1 = $var1 . $var2;

Es gibt noch eine andere Methode, um dasselbe zu erreichen.

$var1 .= $var2;

Man beachte hierbei den Punkt vor dem Gleichheitszeichen (Zuweisungsoperator). Der Punkt bewirkt in etwa "füge der Variable den Wert hinzu, der rechts neben dem Zuweisungsoperator steht". So wird die Variable einfach erweitert.

Weitere Möglichkeiten

Bei der concatenation mit einem Punkt hat man evtl. einen Nachteil bei der Geschwindigkeit. Bei der Verkettung von mehr als zwei Werten werden zunächst die ersten beiden Werte verkettet. Danach beginnt die concatenation von vorn und das Ergebnis der ersten Verkettung wird mit dem dritten Wert verkettet und das Schema würde bei weiteren Werten beibehalten werden.

Reihenfolge bei Concatenation

Bei der Ausgabe mit echo ist eine Verkettung nicht unbedingt notwendig. Man könnte mehrere Variablen und/oder Texte auch dadurch ausgeben lassen, indem man diese mit Komma getrennt als Parameter angibt. Diese Variante kann unter Umständen schneller sein, da die Schritte für die concatenation entfallen. Die beiden Zeilen würden beim folgenden Code dasselbe ausgeben.

// Evtl. schneller
echo $var1, ' Zeichenkette ', $var2;

// Evtl. langsamer
echo $var1 . ' Zeichenkette ' . $var2;

In einigen Tests konnte nicht eindeutig festgestellt werden, dass die erste Variante immer schneller ist. Nur bei langen Verkettungen war die Ausführungszeit häufig geringer als beim Verketten mit dem Punkt (jedoch nicht immer).

Eine weitere Möglichkeit der Verkettung ergibt sich durch die Verwendung von doppelten Hochkommas. Da innerhalb von Hochkommas Texte und Variablen berücksichtigt werden, könnte man das für die Verkettung zunutze machen. Hierbei ist es auch möglich, das Ergebnis der Verkettung einer Variable zuzuweisen. Die beiden Codezeilen bewirken dasselbe.

$var = "$var1 Zeichenkette $var2";

$var = $var1 . ' Zeichenkette ' . $var2;

Beim Setzen von Zeichenketten und/oder Variablen in doppelten Hochkommas muss man darauf achten, die Variablen mit einem Leerzeichen vom nachfolgenden Wert zu trennen, wodurch sich zwangsläufig Leerzeichen ergeben. Es ist auch möglich, Variablen zu kennzeichnen, indem man sie in geschweiften Klammern setzt. Das kann man sich wiederum zunutze machen, wenn man z.B. keine Leerzeichen nach einer Variable möchte. Die beiden Codezeilen führen zum selben Ergebnis.

// Ohne Leerzeichen nach der Variable
$var = "{$var1}Zeichenkette{$var2}";

$var = $var1 . 'Zeichenkette' . $var2;

Es ist auch möglich, die sogenannte Heredoc-Syntax zu verwenden, um Variablen und/oder Texte zu verketten. Hierbei hat man den Vorteil, dass man einfache oder doppelte Hochkommas nicht escapen muss und der Text und/oder die Variablen sich über mehrere Zeilen erstrecken können. Setzt man Zeichenketten in einfachen Hochkommas, müssen doppelte Hochkommas nicht escaped werden und umgekehrt. Die folgenden drei Variablen-Zuweisungen führen zum selben Ergebnis.

// Heredoc-Syntax
$var = <<<BEZ
{$var1}Zeichenkette in "Anführungszeichen"
oder einfachen 'Hochkommas'{$var2}
BEZ;

$var = $var1 . 'Zeichenkette in "Anführungszeichen"
oder einfachen \'Hochkommas\'' . $var2;

$var = "{$var1}Zeichenkette in \"Anführungszeichen\"
oder einfachen 'Hochkommas'{$var2}";

Welche Variante man verwendet, ist eine Sache des Programmierstils. Manche finden die Heredoc-Syntax leserlich, manch andere wiederum nicht. Aus Gründen der Performance-Optimierung ist die Bevorzugung einer Variante häufig nicht notwendig.