Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
 
 
 

PHP var_dump(): Die Funktion zur detaillierten Ausgabe von Variablenwerten

Sie befinden sich: Home > Php Tutorial > Informationen und Inhalt...

Informationen und Inhalt einer Variablen ausgeben


Eintrag am:  26.12.2022
Hits / Besucher:  1245
Sprache:  Deutsch
Kategorie:  Einsteiger Tutorials
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Beim Debugging von PHP-Code reicht es oft nicht, nur den Wert einer Variablen zu sehen. Man braucht auch den Datentyp und bei Strings die Länge. Die Funktion var_dump() liefert genau diese Informationen und zeigt bei Arrays und Objekten zusätzlich die vollständige Struktur an. Damit ist sie das wichtigste Werkzeug, um Typ-Probleme aufzuspüren, die mit print_r() unsichtbar bleiben.

Wichtig: var_dump() zeigt interne Datenstrukturen inklusive Datenbankfelder, Session-Inhalte und Dateipfade. Auf einer Live-Webseite darf diese Ausgabe nie sichtbar sein. Stattdessen Output-Buffering in Kombination mit error_log() verwenden.

Syntax

Die Funktion akzeptiert einen oder mehrere Werte und gibt die Informationen direkt aus. Sie hat keinen Rückgabewert.

var_dump(mixed $value, mixed ...$values): void

Anders als print_r() besitzt var_dump() keinen Return-Modus. Die Ausgabe geht immer direkt an den Browser oder die Konsole. Um sie abzufangen, braucht man Output-Buffering.

Einfache Datentypen

Bei Strings zeigt var_dump() den Typ, die Länge und den Wert an. Bei Integer und Float den Typ und den Wert. Mehrere Variablen können in einem Aufruf untersucht werden.

<?php

$name = "Max";
$alter = 30;
$aktiv = true;

var_dump($name, $alter, $aktiv);
/* Ausgabe:
string(3) "Max"
int(30)
bool(true) */
?>

Die Zahl in Klammern bei Strings gibt die Länge in Bytes an. Bei UTF-8-Strings mit Umlauten kann diese Zahl größer sein als die Anzahl der sichtbaren Zeichen, weil Umlaute zwei Bytes belegen.

Praxis-Szenario: Typ-Verwirrung debuggen

Einer der häufigsten Gründe für schwer auffindbare Fehler in PHP sind Typ-Verwechslungen. Wer Daten über ein Formular oder die URL empfängt, erhält immer Strings. Das führt zu überraschenden Ergebnissen bei strikten Vergleichen.

<?php

$id = $_GET['id']; // z.B. "123"

/* Sieht richtig aus, ist aber false */
if ($id === 123) {
echo "Gefunden";
}

/* var_dump zeigt das Problem sofort */
var_dump($id);
/* Ausgabe: string(3) "123"
$id ist ein String, keine Zahl! */

/* Loesung: Type-Cast oder intval() */
$id = (int) $id;
var_dump($id);
/* Ausgabe: int(123) */
?>

Ohne var_dump() wäre dieses Problem mit print_r() oder echo nicht erkennbar, weil beide einfach 123 ausgeben, ohne den Typ zu verraten.

Arrays untersuchen

Bei Arrays zeigt die Funktion die Anzahl der Elemente, jeden Schlüssel und zu jedem Wert den Datentyp. Verschachtelte Arrays werden vollständig aufgelöst.

<?php

$daten = [
'name' => 'Alice',
'rollen' => ['admin', 'editor'],
'aktiv' => true,
];

var_dump($daten);
/* Ausgabe:
array(3) {
["name"]=> string(5) "Alice"
["rollen"]=> array(2) {
[0]=> string(5) "admin"
[1]=> string(6) "editor"
}
["aktiv"]=> bool(true)
} */
?>

Objekte untersuchen

var_dump() zeigt bei Objekten den Klassennamen, die interne Objekt-ID und alle Eigenschaften mit Typ und Wert, auch private und geschützte. Das ist ein wichtiger Unterschied zu print_r(), das nur öffentliche Eigenschaften anzeigt.

<?php

class Produkt {
public string $name;
public float $preis;
private int $lager = 50;

public function __construct(
string $name, float $preis
) {
$this->name = $name;
$this->preis = $preis;
}
}

$p = new Produkt('Tastatur', 49.99);
var_dump($p);
/* Ausgabe:
object(Produkt)#1 (3) {
["name"]=> string(8) "Tastatur"
["preis"]=> float(49.99)
["lager":"Produkt":private]=>
int(50)
} */
?>

__debugInfo() für kontrollierte Ausgabe

Seit PHP 5.6 können Klassen mit der Magic Method __debugInfo() steuern, welche Informationen var_dump() anzeigt. Das ist nützlich, um sensible Daten wie Passwörter oder API-Schlüssel aus der Debug-Ausgabe auszuschließen.

<?php

class DbConnection {
private string $host;
private string $passwort;
private int $queries = 0;

public function __construct(
string $host, string $passwort
) {
$this->host = $host;
$this->passwort = $passwort;
}

public function __debugInfo(): array
{
return [
'host' => $this->host,
'passwort' => '***verborgen***',
'queries' => $this->queries,
];
}
}

$db = new DbConnection('localhost', 'geheim');
var_dump($db);
/* Das echte Passwort wird nicht angezeigt */
?>

null, false und leere Strings unterscheiden

Ein wichtiger Vorteil gegenüber print_r(): var_dump() kann Werte unterscheiden, die print_r() identisch darstellt.

<?php

var_dump(null); // NULL
var_dump(false); // bool(false)
var_dump(''); // string(0) ""
var_dump(0); // int(0)
var_dump('0'); // string(1) "0"
?>

Bei print_r() würden null, false und der leere String alle als leere Ausgabe erscheinen. var_dump() macht den Unterschied sofort sichtbar. Das ist besonders wichtig, weil 0 == false == null == '' bei losen Vergleichen in PHP alle als gleich gelten.

Ausgabe im Browser lesbar machen

Im Browser gehen Zeilenumbrüche und Einrückungen verloren, weil HTML Whitespace zusammenfasst. Ein <pre>-Tag sorgt für lesbare Formatierung.

<?php

echo '<pre>';
var_dump($daten);
echo '</pre>';
?>

Im CLI (Kommandozeile) ist die Formatierung dagegen von Haus aus korrekt, weil Zeilenumbrüche dort direkt dargestellt werden. Wer sowohl Browser als auch CLI bedienen will, kann mit php_sapi_name() den Kontext erkennen und das <pre>-Tag nur im Browser ausgeben.

Xdebug verändert var_dump()

Xdebug ist eine weit verbreitete PHP-Extension für Debugging. Sie überschreibt das Standard-Verhalten von var_dump() und liefert stattdessen eine farbige, HTML-formatierte Ausgabe. Das führt häufig zu Verwirrung: Auf dem Entwicklungsrechner sieht var_dump() anders aus als auf dem Produktiv-Server.

Außerdem begrenzt Xdebug die Ausgabetiefe standardmäßig auf 3 Ebenen. Bei tief verschachtelten Strukturen erscheint dann nur ein Auslassungszeichen. Die Limits lassen sich in der php.ini anpassen:

; Maximale Verschachtelungstiefe

xdebug.var_display_max_depth = 5

; Maximale Anzahl Array-Elemente
xdebug.var_display_max_children = 256

; Maximale String-Laenge in Bytes
xdebug.var_display_max_data = 1024

Wenn in der Ausgabe Daten zu fehlen scheinen, liegt es meistens an diesen Xdebug-Limits. Ohne Xdebug zeigt var_dump() immer die vollständige Struktur an.

Ausgabe in Variable speichern

Anders als print_r() hat var_dump() keinen Return-Modus. Um die Ausgabe in einer Variable zu speichern oder in eine Log-Datei zu schreiben, hilft Output-Buffering.

<?php

ob_start();
var_dump($daten);
$debug = ob_get_clean();

/* Sicher in die Log-Datei schreiben */
error_log('Debug: ' . $debug);
?>

Mit ob_start() wird die Ausgabe abgefangen, statt sie an den Browser zu senden. ob_get_clean() liefert den Inhalt des Puffers als String und leert ihn gleichzeitig. Dieses Pattern eignet sich gut für Produktions-Debugging, weil die Ausgabe nur in der Log-Datei landet.

Vergleich: var_dump(), print_r() und var_export()

PHP bietet drei Funktionen zur Variablen-Inspektion. Jede hat ihren eigenen Schwerpunkt.

var_dump() zeigt Typ, Länge und Wert. Sie ist die beste Wahl für Debugging, besonders wenn der Datentyp entscheidend ist.

print_r() liefert eine kompakte, lesbare Darstellung ohne Typ-Info. Ideal für einen schnellen Überblick und für Logging mit error_log().

var_export() gibt gültigen PHP-Code zurück, der den Wert erzeugt. Damit lassen sich Datenstrukturen als PHP-Dateien cachen.

<?php

$wert = "42";

var_dump($wert);
/* string(2) "42" */

print_r($wert);
/* 42 */

var_export($wert);
/* '42' */
?>

var_export() als Cache-Werkzeug

Ein praktischer Anwendungsfall für var_export() ist das Speichern von Arrays als PHP-Dateien. Dieses Pattern nutzen viele Frameworks intern für Konfigurationscaches.

<?php

$config = [
'db_host' => 'localhost',
'db_name' => 'shop',
'cache' => true,
];

/* Array als PHP-Datei speichern */
file_put_contents(
'cache/config.php',
'<?php return '
. var_export($config, true)
. ';'
);

/* Spaeter wieder laden */
$config = include 'cache/config.php';
?>

Vom var_dump() zum Breakpoint

var_dump() ist der Einstieg ins Debugging, aber bei komplexen Problemen stößt man damit an Grenzen. Man muss den Code ändern, die Seite neu laden und die Ausgabe suchen. Xdebug bietet mit Breakpoints eine komfortablere Alternative: Man setzt einen Haltepunkt in der IDE, und der Code stoppt an dieser Stelle. Dann kann man alle Variablen inspizieren, ohne eine einzige Zeile Code zu ändern. Xdebug lässt sich in PhpStorm und VS Code integrieren.

Zusammenfassung

var_dump() ist das Standardwerkzeug zum Debugging in PHP. Es zeigt Datentyp, Wert und bei komplexen Strukturen die vollständige Hierarchie. Besonders wertvoll ist die Funktion bei der Unterscheidung von null, false, 0 und leeren Strings. Xdebug verändert die Ausgabe und begrenzt die Tiefe, was man bei der Fehlersuche beachten sollte. Für eine kompaktere Darstellung ohne Typ-Informationen eignet sich print_r(), für Code-Generierung var_export().

 

Tags:

 

Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.