6. Januar 2008 Strings für Fortgeschrittene in PHP

in Kategorie PHP

Tags: , , ,


In diesem Beitrag möchte ich einige außergewöhnliche bzw. fortgeschrittene Techniken zum Umgang mit Strings in PHP aufzeigen. In PHP gibt es verschiedenste Möglichkeiten Zeichenketten zu erzeugen und mit ihnen umzugehen.

Die Anführungszeichen

Jeder, der bereits mit PHP gearbeitet hat, sollte sich über den Unterschied zwischen den einfachen und den doppelten Anführungszeichen bewusst sein. Bei den doppelten Anführungszeichen werden sog. Escape–Sequenzen ausgewertet, bei den einfachen nicht. Hier ein Beispiel:

<?php
	echo 'erste Zeile\nimmernoch die erste Zeile';
	// Ausgabe:
	// erste Zeile\nimmernoch die erste Zeile
 
	echo "erste Zeile\nzweite Zeile";
	// Ausgabe:
	// erste Zeile
	// zweite Zeile
?>

Die Escape–Sequenz \’ funktioniert hingegen auch bei den einfachen Anführungszeichen, da man dieses Zeichen ansonsten nicht darstellen könnte. Wenn man Escape-Sequenzen nicht verwendet, sollte man die einfachen Anführungszeichen nutzen.

Heredoc Syntax

Die Heredoc Syntax mag auf den ersten Blick nicht besonders stilvoll erscheinen, sie kann aber manchmal durchaus praktisch sein. Ein Beispiel:

<?php
echo <<<BLOCK
Dies ist Text\nZeile zwei
"Zeile drei"
'Zeile vier'
BLOCK;
 
// Ausgabe:
// Dies ist Text
// Zeile zwei
// "Zeile drei"
// 'Zeile vier'
?>

Ein solcher Stringblock wird mit <<< eingeleitet, danach folgt ein Label, welches man nennen kann wie man möchte. Anhand dieses Labels erkennt der PHP–Parser wann der Stringblock endet. Das abschließende Label muss direkt am Zeilenanfang stehen, ansonsten wird es nicht erkannt. Bei der Heredoc Syntax werden alle Escape–Sequenzen ausgewertet und praktisch ist, dass Anführungszeichen nicht escaped werden müssen.

Variablenparsing

Um verschiedene Variablen in einem String zu verbinden gibt es in PHP eine einfache und eine komplexe Syntax. Die einfache Syntax sollte jedem geläufig sein. Bei der Heredoc Syntax und bei doppelten Anführungszeichen werden Variablen, Arrays und Objekte ausgewertet:

<?php
	$foo = 'bar';
	echo "foo $foo";
 
	// Ausgabe:
	// foo bar
?>

Oftmals können Arrays und Objekte aber vom Parser nicht eindeutig ausgewertet werden, deshalb bietet PHP noch eine andere Syntax, die sog. komplexe Syntax. Mit ihr lassen sich auch komplexere Ausdrücke in Strings einbetten. Bei dieser Syntax werden die auszuwertenden Variablen mit einer geschweiften Klammer umschlossen. Hier einige Beispiele:

<?php
	echo "{$foo}";
	echo "{$foo['bar'][1]}";
	echo "{$foo->bar[0]->foo}";
?>

Diese Syntax wird nur erkannt, wenn direkt auf die geschweifte Klammer das Dollar–Symbol folgt. Um das Dollar–Symbol als Zeichen zu schreiben kann man es mit \$ escapen.

Fazit: Viele Wege führen ans Ziel

PHP bietet für viele Geschmäcker die passende Syntax. Normalerweise sollte man sich immer an die nächst einfachste Syntax halten, damit der Quellcode nicht unnötig kompliziert wird. Ob man die komplexe Syntax wirklich benötigt, darüber lässt sich natürlich streiten, denn hier würde auch ein einfacher Punkt genügen, um die Strings zu verbinden.

Ähnliche Artikel


Der Beitrag wurde am Sonntag, den 6. Januar 2008 um 13:56 Uhr veröffentlicht und wurde unter PHP abgelegt. du kannst die Kommentare zu diesen Eintrag durch den RSS 2.0 Feed verfolgen. du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.

Kommentare

  1. Am 12. März 2008 um 13:24 Uhr
    bernd gravatar

    Bei jedem, recht einfach zu verstehenden, Beispiel zeigst du, was letztendlich als Ausgabe zu sehen ist.

    Nur beim letzten, etwas komplexeren Bsp. machst du das nicht. Warum?

  2. Am 12. März 2008 um 13:52 Uhr
    Mario Volke gravatar

    Hallo Bernd,
    ich dachte es wäre klar, was hier ausgegeben wird, die Ausdrücke innerhalb der geschweiften Klammern entsprechen ja genau der normalen PHP-Syntax. In der ersten Zeile würde einfach der Inhalt der Variablen ausgegeben, falls die Variable ein Objekt mit einer __toString Methode sein sollte, so würde die Rückgabe dieser Methode aufgerufen. In der zweiten Zeile ist die Variable $foo ein Array, welches ganz normal adressiert wird. Und in der letzten Zeile greife ich auf ein Objekt zu, wie das nun genau aussieht spielt für das Beispiel eigentlich keine Rolle.

    Im Endeffekt wollte ich einfach die Initialisierung dieser Variablen sparen, damit man das Wesentliche dieses Beispiels auch erkennt.

Einen Kommentar schreiben