6. Ausgabe mit PHP

Im letzten Teil dieses Tutorials haben wir uns mit Arrays in PHP beschäftigt. In dem hiesigen Artikel und auch schon zuvor habe ich Dir gezeigt, wie Du diverse Dinge ausgeben kannst.

In diesem Artikel beschäftige ich mich jetzt noch einmal intensiv mit der Ausgabe und zeige Dir Funktionen und Sprachkonstrukte wie print_r(), printf() und echo.

Strings und Variablen ausgeben

echo ist in der Regel die Funktion der Wahl um Variablen auszugeben. Du kannst dabei Zeichenketten und Variablen mischen. Sogar Teile von Arrays können ausgegeben werden.

Am besten hältst Du dich an die folgende Regel: Enthält eine Anweisung auch Variablen, so verwendest du doppelte Anführungszeichen für die Zeichenketten. Enthält deine Ausgabeanweisung ausschließlich Zeichenketten solltest du einfache Anführungszeichen verwenden.

Ein Punkt dient immer zur Verbindung von diversen Elementen und das sowohl bei der Ausgabe als auch beim Setzen von Variablen in PHP. Zum besseren Verständnis hier einige Beispiele:

$ausgabe = 'Hallo Welt!';
echo $ausgabe; // Ausgabe: Hallo Welt!

echo $ausgabe." und noch einmal: ".$ausgabe." Ende."; // Ausgabe: Hallo Welt! und noch einmal: Hallo Welt! Ende.

echo 'Hallo Welt, ohne Variablen!';

Soweit verstanden?

Mit jedem echo-Befehl wird die Ausgabe direkt an den Anwender weitergeleitet. Der Inhalt des ersten echo-Befehls wird als auch als erstes im Quelltext des Benutzers auftauchen.

Eine Ausnahme davon bildet das sogenannte Zwischenspeichern oder auch Buffern in PHP. Dazu erfährst Du unten mehr.

Array ungefiltert ausgeben

Zunächst wenden wir uns nämlich erst einmal der Ausgabe eines Arrays hinzu. Wie Du bereits im fünften Teil gelernt hast, kannst Du einen Teil eines Arrays mit echo ausgeben, zum Beispiel so:

echo $array[0]." (1. Wert) und ".$array[1]." (2. Wert)";

Was aber, wenn Du nicht weißt, wie viele Werte das Array enthält und dennoch alle Werte ausgeben möchtest?

Eine Möglichkeit dafür sind Schleifen in PHP. Damit ist auch eine hübsche Formatierung kein Problem. Um als Entwickler zu erfahren, was in einem Array gespeichert ist, reicht aber auch print_r() vollkommen aus.

$beispielArray = array('Äpfel', 'Birnen', 'Orangen');
print_r($beispielArray);

print_r(array('Äpfel', 'Birnen', 'Orangen'));

Beide Funktionsaufrufe sind identisch und führen zu der gleichen Ausgabe, welche in diesem Fall wie folgt aussieht:

Array ( [0] => Äpfel [1] => Birnen [2] => Orangen )

Das funktioniert natürlich auch, wenn Du assoziative Arrays, also Arrays mit eigenen Schlüsseln, oder verschachtelte Arrays verwendest.

Ausgabe mit formatierten Variablen

Die oben angesprochene Methode bietet einen entscheidenden Nachteil: Der Inhalt der Variablen wird nicht überprüft.

Wenn sich nun aber HTML- oder JavaScript-Code in einer Variable befindet, die beispielsweise Nutzer-Eingaben enthalten könnte, würde dieser ausgeführt werden. Man spricht dabei vom sogenannten Cross-Site-Scripting (kurz: XSS).

Methoden wie htmlspecialchars() können dafür verwendet werden, jede einzelne Variable vor der Ausgabe mit echo zu überprüfen.

Es existiert weiterhin eine andere Möglichkeit, und die heißt printf() mit direkter Ausgabe beziehungsweise sprintf() mit Rückgabe.

Mit diesen Funktionen kannst Du so einiges anstellen, weshalb ich sie hier nur kurz anreißen will. Das Wichtigste, was Du wissen musst, ist, dass der erste Parameter eine Zeichenkette enthält. Außerdem können beliebige viele Argumente übergeben werden, die per %-Zeichen in der ersten Zeichenkette gespeichert sind.

Hinter diesem Prozentzeichen kann das entsprechende Argument (1. Prozenzeichen = 1. Argument und so weiter) durch verschiedene Befehle in ein neues Format „gezwungen“ werden. Etwa so:

printf("Es gibt %d Affen und %d Giraffen in dem %s.", 2, 10, 'Wald');

Dabei können die Argumente natürlich immer auch als Variablen angegeben werden, sodass deren Inhalt beziehungsweise Wert verwendet wird.

Wenn nun aber eine Variable mehrmals eingebunden werden soll, kann diese auch direkt angesprochen werden. Dafür ist die entsprechende Nummer (1. Argument = 1 und so weiter) notwendig und das für PHP übliche Dollar-Zeichen. Wie das geht verdeutlicht dieses Beispiel aus dem PHP Manual:

$format = 'Der %2$s enthält %1$d Affen.' .
'%1$d Affen sind ziemlich viel für einen %2$s.';
printf($format, $anzahl, $ort);

PHP Buffer – Ausgabe zwischenspeichern

Du weißt nun schon Einiges über die Ausgabe in PHP. Doch Eines ist Dir bis dato vermutlich nicht bekannt: Buffer.

Wie ich es zuvor erläutert habe, wird der Inhalt von echo, printf() und print_r() direkt an den Browser des Benutzers weitergeleitet und ausgegeben. Es gibt aber auch die Möglichkeit, diese Ausgaben zunächst zwischenzuspeichern, zu bearbeiten und anschließend weiterzuleiten.

Die naheliegendste Möglichkeit besteht darin, alles, was später einmal ausgegeben werden soll in einer Variablen zu speichern. Wenn der Nutzer dann eine andere Sprache als die vorliegende ausgewählt hat, werden zum Beispiel alle deutschen Inhalte durch englische ersetzt.

Gerade bei großen Projekten kann das aber umständlich werden, wenn sie nicht von vornherein darauf eingerichtet sind.

Hier – oder auch in anderen Anwendungsfällen – ist der PHP Buffer Dein passender Helfer. Mit ob_start() wird der Buffer aktiviert. Nunmehr werden die Ausgaben aller Funktionen, wie z.B. von echo, in einem internen Speicher zwischengespeichert.

Als erster Parameter kann der Name einer Funktion übergeben werden, die für die Verarbeitung zuständig ist, bevor der Zwischenspeicher geleert und die Inhalte ausgegeben werden.

Dafür muss aber das Zwischenspeichern zunächst mit ob_end_flush() beendet werden. Hier noch einmal ein kompaktes Beispiel zur Veranschaulichung:

function callback($buffer) {
$finde = array('Hallo Welt!', 'So funktioniert der Buffer in PHP.');
$ersetze = array('Hello World!', 'That is how the buffer works.');
return (str_replace($finde, $ersetze, $buffer));
}

ob_start("callback");

?>
Hallo Welt!
<?php

echo 'So funktioniert der Buffer in PHP.';

ob_end_flush();

Anhand dieses Beispiels lernst Du gleich noch etwas Neues kennen: Du kannst die PHP Tags jederzeit unterbrechen, um entsprechenden HTML-Code oder einfach nur Text auszugeben. Dieser kann dann zwar keine Variablen enthalten, wird aber ebenfalls mit aktivem Buffer zwischengespeichert.

Fazit & Ausblick

Auch was die Ausgabemöglichkeiten betrifft, gilt bei PHP eher „Klotzen denn Kleckern“. Die Ausgabe ist sowohl unformatiert, als auch formatiert, mit oder ohne Variablen und Arrays möglich.

Sogar das Zwischenspeichern mit dem PHP Buffer wird von Haus aus unterstützt.

Im nächsten Teil dieses Tutorials beschäftigen wir uns dann mit sogenannten Konstanten und globalen Variablen in PHP.