Geschrieben von alopex am 10.05.2005, 01:13

Nie wieder echo?
Alternativen zum echo-Befehl

============================================================
Vorgeschwafel
============================================================

PHP-Anfänger benutzen gerne den echo()-Befehl. Es gibt aber wesentlich bessere Möglichkeiten um unter PHP Texte auszugeben. Deswegen möchte ich im Folgenden einige interessante Alternativen zu echo() vorstellen.

============================================================
print()
============================================================

Alles, was echo() kann, kann print auch. Die Klammern kann man zwar weglassen. Es ist aber empfehlenswert, sie zu benutzen. Im Gegensatz zu echo() erzeugt print() einen Rückgabewert (TRUE oder FALSE). Man kann ein oder mehrere Argumente übergeben. Allerdings müssen diese mit dem Punkt-Operator (».«) zusammengeklebt werden:


print(
$ein_string.
"eine String-Konstante".
$noch_ein_string.
'noch eine String-Konstante'
);

Die übergebenen String-Konstanten verhalten sich wie gewohnt: Steht der Text zwischen doppelten Anführungszeichen »"« werden darin enthaltene Variablennamen durch die Variableninhalte ersetzt. Bei einfachen Anführungszeichen »'« werden die Variablennamen beibehalten.

============================================================
printf()
============================================================

Mit printf() ist die formatierte Ausgabe von Variablen möglich. Dazu werden der Funktion ein Formatstring und eine getrennte Liste durch Komma getrennter Variablen übergeben:


printf(
"Ihre IP lautet: %s <br />\nIhr Browser heißt: %s<br />\n",
$_SERVER['REMOTE_ADDR'],
$_SERVER['HTTP_USER_AGENT']
);

Will man beispielsweise einen Link für eine HTML-Ausgabe konstruieren, so geht das mit printf() deutlich eleganter als mit echo():


$link_ziel = 'http://php.eisfux.de/';
$link_bezeichnung = 'PHP-Bastelecke';
printf(
'<a href="%s">%s</a>'."\n",
$link_ziel,
$link_bezeichnung
);

Neben »%s« für die Ausgabe von String-Variablen gibt es noch andere Platzhalter. Eine ausführliche Liste befindet sich in der Online-Dokumentation zu sprintf():

http://de.php.net/manual/de/function.sprintf.php

============================================================
sprint() und sprintf()
============================================================

Das kleine »s« vor den beiden Befehlsnamen verändert diese so, dass sie nicht mehr direkt in die Ausgabe schreiben, sondern einen String an eine Variable übergeben.


$out = 'Vorher<br />'."\n";
print($out);
$out = sprint('Hallo?'.'<br />'."\n".'Selber Hallo!');
print($out);

Das erzeugt folgende Ausgabe im Browser:


Vorher
Hallo?
Selber Hallo!

Das sieht jetzt natürlich nicht besonders professionell aus. Bei größeren Scripts können sich aber sprint() und vor allem sprintf() als sehr nützlich erweisen.

============================================================
print_r()
============================================================

Schon mal versucht, mit echo() oder print() ein Array, ein Objekt oder eine andere komplexe Struktur auszugeben? PHP quittiert diesen Versuch mit der Ausgabe von Array und fertig. Im Hintergrund wird noch eine Fehlermeldung im Error-Log erzeugt. Mit print_r() dagegen kann man die Struktur schön formatiert ausgeben.


print_r($_SERVER);

Das gibt beispielsweise Folgendes aus:


Array
(
[COMSPEC] => C:\WINXP\system32\cmd.exe
[DOCUMENT_ROOT] => e:/data/webprojects/lima-city/alopex/html
...
[HTTP_CONNECTION] => Keep-Alive, TE
[HTTP_HOST] => alopex.pyrokar.lima-city.loc
[HTTP_IF_MODIFIED_SINCE] => Mon, 09 May 2005 07:12:29 GMT
...
[SERVER_SOFTWARE] => Apache/1.3.31 (Win32) PHP/4.3.11
[PHP_SELF] => /hted/getenv.php
)

Es werden auch mehrdimensionale Arrays ausgegeben. Die Variable $GLOBALS enthält sämtliche dem PHP-Script bekannten globalen Variablen.


print_r($GLOBALS);

============================================================
html_print_r()
============================================================

Befindet sich der Browser im HTML-Anzeigemodus, erzeugt print_r() allerdings Zeichensalat. Daher sollten wir vorher spezielle HTML-Zeichen und die Zeilenumbrüche in brauchbare HTML-Ausgaben umwandeln. Dazu habe ich eine Funktion namens html_print_r() geschrieben:


function html_print_r(
&$array
) {
$array = preg_replace(
array('/&/', '/\</', '/\>/'),
array('&', '<', '>'),
$array
)
printf( "\n<pre>%s</pre>\n", dehtml( print_r($array, 1) ) );
}

Siehe da: Hier erweist sich printf() als nützlich. Und print_r() wird hier mit einem zusätzlichen Parameter aufgerufen. Der hat die gleiche Wirkung wie das »s« vor print() oder printf(): Die Ausgabe erfolgt nicht im Browserfenster sondern wird in eine Variable umgeleitet:


$out = print_r($array, 1);

============================================================
Ausführliche Dokumentation
============================================================

Dies war eine Einführung in die Möglichkeiten der Textausgabe unter PHP ohne den echo()-Befehl. Im PHP-Online-Manual werden die Funktionen ausführlicher dokumentiert:

http://de.php.net/manual/de/function.print.php
http://de.php.net/manual/de/function.printf.php
http://de.php.net/manual/de/function.sprint.php
http://de.php.net/manual/de/function.sprintf.php
http://de.php.net/manual/de/function.print-r.php

============================================================
html_print_r() und weitere Funktionen
============================================================

http://alopex.pyrokar.lima-city.de/index.php/PHP/essentials.html

============================================================
html_print_r() und weitere Funktionen
============================================================

Dieses Tutorial kann mit formatierten Quelltexten und von eventuellen Fehlern bereinigt auch auf folgender Seite betrachtet werden:
http://alopex.pyrokar.lima-city.de/index.php/PHP/Nie%20wieder%20echo.html

============================================================
Fanden Sie diesen Text nützlich?
Ja: http://alopex.pyrokar.lima-city.de/xlink.php/tut_ja
Nö: http://alopex.pyrokar.lima-city.de/xlink.php/tut_nein

Bewertung Anzahl
6
69,2 %
9 Bewertungen
5
15,4 %
2 Bewertungen
4
7,7 %
1 Bewertungen
3
7,7 %
1 Bewertungen