PHP/Tutorials/Variablenkontrolle

Aus SELFHTML-Wiki
< PHP‎ | Tutorials
Wechseln zu: Navigation, Suche

Beim Entwickeln und Testen von PHP-Skripten für den Einsatz im Web ist es sehr hilfreich, wenn nicht unerlässlich, sich die Werte von bestimmten Variablen zur Kontrolle im Browser anzeigen zu lassen.

Selfhtml-beispiel 150.svg

So sieht's aus:

Dies gilt besonders für GET- und POST-Parameter, Cookies sowie Sessiondaten, also alles Werte, die in Arrays gespeichert sind.

Zur komfortablen Ausgabe von Array-Strukturen stehen in PHP die Funktionen var_dump() und print_r() zur Verfügung. Um eine richtige Darstellung der Zeilenumbrüche im Browser zu erreichen, muss die Ausgabe dieser Funktionen zusätzlich in pre-Tags eingeschlossen werden. Da dies auf Dauer etwas umständlich ist, liegt es nahe sich eine eigene Funktion für diese Aufgabe zu schreiben.

Die Funktion print_r() liefert zwar eine besser lesbare Ausgabe als var_dump(), es werden aber keinerlei Informationen zum Typ der Variablen – und boolsche oder NULL-Werte sogar überhaupt nicht – angezeigt. Damit ist sie für unsere Zwecke wenig geeignet.

Die Funktion var_dump() liefert all diese Informationen, allerdings lässt die Formatierung der Ausgabe stark zu wünschen übrig. Mit einigen wenigen Veränderungen lässt sich aber eine deutlich aufgeräumtere Darstellung erreichen.

Und genau das ist es, was die Funktion im folgenden Beispiel tut.

Anwendungsbeispiel

my_var_dump.php
<?php
/**
* my_var_dump.php
*
* Funktion zur Anzeige der Werte von Variablen im Browser
*
*/


function my_var_dump($v) {
        // Ausgabe von var_dump über Output-Buffer in Variable einlesen
	ob_start ();
        var_dump ($v);
	$content = ob_get_contents ();
	ob_end_clean ();


        // maximale Einrückung ermitteln
        $m = 0;
#1	
        preg_match_all ('#^(.*)=>#mU', $content, $stack);
        $lines = $stack[1];
        $indents = array_map ('strlen', $lines);
	if ($indents) {
	        $m = max ($indents) + 1;
	}
#2
        // Ausgabe von var_dump() an maximaler Einrückung ausrichten
	$content = preg_replace (
			'#^(.*)=>\\n\s+(\S)#eUm',
			'"\\1" .str_repeat(" ", $m - strlen("\\1")>1 ? $m - strlen("\\1") : 1). "\\2"',
			$content);


        // bei Array-Strukturen öffnende Klammer { in neue Zeile
	$content = preg_replace (
			'#^((\s*).*){$#m',
			"\\1\n\\2{",
			$content);
	
	echo '<pre>'. htmlentities($content). '</pre>';
}

?>

Zunächst wird die Ausgabe von var_dump() mit Hilfe der PHP-Funktionen zur Ausgabe-Pufferung in eine Variable eingelesen. Dann wird die erforderliche Einrücktiefe ermittelt um alle Werte vertikal untereinander ausrichten zu können. Dann werden entsprechend Leerzeichen ergänzt, und die zweizeilige Ausgabe der Key-Value Paare von var_dump() zu jeweils einer Zeile zusammengefasst.

Das Ergebnis wird mit Hilfe von <pre>-HTML-Tags und htmlentities() zur Anzeige im Browser aufbereitet und ausgegeben.

Beachten Sie: Wenn die Bezeichner für die Arraykeys sehr lang sind, oder tief gestaffelte Arraystrukturen ausgegeben werden, kann es zu unübersichtlich langen Zeilen kommen.

Falls Sie keine vertikale Ausrichtung der Werte wünschen, brauchen Sie im Beispiel nur den Bereich von #1 bis #2 auszukommentieren.

Eine weitere Idee wäre es, den maximalen Wert für die Einrückung $m nach oben zu begrenzen.

Wenn Sie sich die unterschiedlichen Resultate der genannten Funktionen einmal im Vergleich anschauen möchten, können Sie dazu folgendes kleine Skript benutzen.

Variablenkontrolle.php
<?php
/**
* Variablenkontrolle.php
*
* Vergleich der Ausgabe von print_r(), var_dump() und my_var_dump();
*
*/

include ('./my_var_dump.php');		# Hier das obige Beispiel einfügen 

function h1_headline($v)
{
 		if (!empty($v)) {
  		printf('<h1>%s</h1>',$v);
  	}
}

function show_var_dump($v)
{
		ob_start();
		var_dump($v);
		$content = ob_get_contents();
		ob_end_clean();
		echo '<pre>'.$content.'</pre>';
}

function show_print_r($v)
{
		ob_start();
		print_r($v);
		$content = ob_get_contents();
		ob_end_clean();
		echo '<pre>'.$content.'</pre>';
}

$example = array(
 'Hallo Welt',
 5,
 -12,
 3.14,
 7E-10,
 array(
  1,
  2,
  3,
  4,
  array(
   'kalt' => 'Alaska',
   'sehr warm' =>'Brasilien',
   'überschwemmt' => 'China',
  ),
 ),
 true,
 false,
 NULL,
 '',
 '<strong>fett</strong>',
);

h1_headline ('var_dump();');
show_var_dump ($example);

h1_headline ('print_r();');
show_print_r ($example);

h1_headline ('my_var_dump();');
my_var_dump ($example);

?>

Beispiel

Selfhtml-beispiel 150.svg

So sieht's aus:

Weblinks

Dieser Artikel ist die überarbeitete Version eines Selfhtml-aktuell-Artikels aus dem Jahre 2006: