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

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

Inhalt von Variablen in lesbarer Form ausgeben

Sie befinden sich: Home > Php Tutorial > Inhalt von Variablen in...

Inhalt von Variablen in lesbarer Form ausgeben


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

Beim Entwickeln von PHP-Anwendungen willst du häufig wissen, welche Werte in einem Array oder Objekt stecken. print_r() gibt dir genau diese Information in einem Format, das du als Mensch sofort lesen kannst. Die Funktion ist eines der ältesten und meistgenutzten Debugging-Werkzeuge in PHP.

Was ist print_r() und wofür braucht man es?

Die PHP-Funktion print_r() gibt die Struktur und den Inhalt von Variablen in einem menschenlesbaren Format aus. Sie zeigt bei Arrays alle Schlüssel und Werte, bei Objekten alle öffentlichen Eigenschaften und bei einfachen Variablen den Wert selbst.

Im Vergleich zu var_dump() ist die Ausgabe kompakter und übersichtlicher, zeigt aber keine Typinformationen an. Für einen schnellen Überblick über den Inhalt einer Variable ist print_r() die erste Wahl.

Syntax und Parameter

Der Funktionsaufruf ist einfach gehalten und bietet mit dem optionalen zweiten Parameter eine wichtige Steuerungsmöglichkeit.

print_r(mixed $value, bool $return = false): string|true

Parameter:

  • $value (mixed, erforderlich): Die Variable, deren Inhalt du sehen möchtest. Kann ein Array, Objekt, String, Integer, Float, Boolean oder null sein.

  • $return (bool, optional, Standard: false):

    • false: Die Ausgabe wird direkt an den Browser oder die Konsole gesendet. Rückgabewert ist true.
    • true: Die Ausgabe wird als String zurückgegeben, statt sie direkt auszugeben. Das ist entscheidend für Logging und Weiterverarbeitung.

Grundlegende Beispiele

Die folgenden Beispiele zeigen, wie print_r() verschiedene Datentypen darstellt.

Einfache Variablen

<?php

print_r("Hello World");
// Hello World

print_r(42);
// 42

print_r(3.14);
// 3.14

print_r(true);
// 1

print_r(false);
// (keine Ausgabe)

print_r(null);
// (keine Ausgabe)

Beachte: Bei false und null gibt print_r() nichts aus. Wenn du den Datentyp sehen willst, verwende stattdessen var_dump().

Arrays

Bei Arrays zeigt print_r() seine Stärke: Die verschachtelte Struktur wird eingerueckt und ist sofort lesbar.

<?php

$aObst = [
'a' => 'Apfel',
'c' => 'Clementine',
'd' => ['x', 'y', 'z']
];
print_r($aObst);

Ausgabe:

Array

(
[a] => Apfel
[c] => Clementine
[d] => Array
(
[0] => x
[1] => y
[2] => z
)
)

In Schleifen verwenden

Du kannst print_r() innerhalb von foreach-Schleifen verwenden, um den Inhalt jedes Elements zu prüfen. Das hilft besonders beim Debugging.

<?php

$aUser = [
['name' => 'Anna', 'alter' => 28],
['name' => 'Tom', 'alter' => 35]
];

foreach ($aUser as $iKey => $aEintrag) {
echo "--- Eintrag $iKey ---" . PHP_EOL;
print_r($aEintrag);
}

Der Return-Modus: print_r($var, true)

Im Standardmodus gibt print_r() die Ausgabe direkt aus. Mit dem zweiten Parameter true wird die Ausgabe stattdessen als String zurückgegeben. Das ermöglicht dir, die Ausgabe zu speichern, zu loggen oder weiterzuverarbeiten.

<?php

$aConfig = ['debug' => true, 'port' => 8080];

/* Direkte Ausgabe */
print_r($aConfig);

/* Als String speichern */
$sAusgabe = print_r($aConfig, true);

/* Jetzt kannst du $sAusgabe
beliebig verwenden */
echo "Config: " . $sAusgabe;

Der Return-Modus ist die Grundlage für zwei wichtige Patterns: das Speichern in Logdateien und die formatierte Browserausgabe.

Browser-Formatierung mit pre-Tags

Im Browser werden Zeilenumbrüche und Einrückungen normalerweise ignoriert. Die Ausgabe von print_r() wird dadurch unlesbar, weil alles in einer Zeile erscheint. Die Lösung: Umschließe die Ausgabe mit <pre>-Tags.

<?php

$aDaten = [
'users' => ['Anna', 'Tom'],
'count' => 2
];

/* Ohne pre: alles in einer Zeile */
print_r($aDaten);

/* Mit pre: formatiert und lesbar */
echo '<pre>';
print_r($aDaten);
echo '</pre>';

/* Oder kompakt: */
echo '<pre>' . print_r($aDaten, true) . '</pre>';

In der CLI (Kommandozeile) sind <pre>-Tags nicht nötig, da die Konsole Zeilenumbrüche und Leerzeichen korrekt darstellt.

Sicheres Debugging mit error_log() und print_r()

Das wichtigste Pattern für den professionellen Einsatz von print_r() ist die Kombination mit error_log(). Damit schreibst du die Ausgabe in die PHP-Logdatei, ohne dass der Benutzer etwas davon sieht.

<?php

$aWarenkorb = [
['produkt' => 'Laptop', 'preis' => 999],
['produkt' => 'Maus', 'preis' => 29]
];

/* Array-Inhalt in die Logdatei
schreiben (nicht sichtbar
fuer den Benutzer) */
error_log(
'Warenkorb: '
. print_r($aWarenkorb, true)
);

Die Logeinträge findest du in der Datei, die in der php.ini unter error_log konfiguriert ist. Bei Apache liegt sie häufig unter /var/log/apache2/error.log, bei PHP-FPM unter /var/log/php-fpm/error.log. Du kannst den Pfad mit ini_get('error_log') abfragen.

<?php

/* Wo landen die Logs? */
echo ini_get('error_log');

/* Eigene Logdatei verwenden */
ini_set('error_log', '/tmp/debug.log');

error_log(
'Session: '
. print_r($_SESSION, true)
);

Dieses Pattern ist die einzig sichere Methode, um Variablen in einer Produktionsumgebung zu debuggen. Die Fehlerausgabe im Browser sollte dort immer deaktiviert sein.

print_r() mit Objekten

print_r() zeigt bei Objekten alle öffentlichen Eigenschaften an. Private und geschützte Eigenschaften werden nicht ausgegeben. Das ist ein wichtiger Unterschied zu var_dump(), das alle Eigenschaften inklusive Sichtbarkeit anzeigt.

<?php

class Benutzer
{
public string $name = 'Anna';
public int $alter = 28;
protected string $email = 'a@b.de';
private string $passwort = 'geheim';
}

$oUser = new Benutzer();
print_r($oUser);

Ausgabe:

Benutzer Object

(
[name] => Anna
[alter] => 28
)

Die geschützten und privaten Eigenschaften $email und $passwort fehlen in der Ausgabe. Wenn du alle Eigenschaften sehen willst, verwende var_dump().

__debugInfo() für kontrollierte Ausgabe

Ab PHP 5.6 kannst du mit der Magic Method __debugInfo() steuern, was print_r() und var_dump() anzeigen. Das ist nützlich, um sensible Daten aus der Debug-Ausgabe auszuschließen.

<?php

class ApiClient
{
private string $apiKey;
private string $baseUrl;
private int $requestCount = 0;

public function __construct(
string $apiKey,
string $baseUrl
) {
$this->apiKey = $apiKey;
$this->baseUrl = $baseUrl;
}

public function __debugInfo(): array
{
return [
'baseUrl' => $this->baseUrl,
'requestCount' => $this->requestCount,
'apiKey' => '***versteckt***'
];
}
}

$oClient = new ApiClient(
'sk-geheimer-schluessel',
'https://api.example.com'
);
print_r($oClient);

Ausgabe:

ApiClient Object

(
[baseUrl] => https://api.example.com
[requestCount] => 0
[apiKey] => ***versteckt***
)

Stolperfalle: Zirkuläre Referenzen

Wenn ein Array oder Objekt auf sich selbst verweist, erkennt print_r() die Rekursion und bricht mit dem Hinweis *RECURSION* ab, statt in eine Endlosschleife zu geraten.

<?php

$a = ['name' => 'Test'];
$a['selbst'] =& $a;
print_r($a);

Ausgabe:

Array

(
[name] => Test
[selbst] => Array
(
*RECURSION*
)
)

Das kommt in der Praxis vor, wenn Objekte bidirektionale Beziehungen haben (z.B. ein Eltern-Objekt verweist auf Kind-Objekte und umgekehrt). Die *RECURSION*-Meldung ist kein Fehler, sondern ein Schutzmechanismus.

Warnung: print_r() niemals in Produktion sichtbar verwenden

print_r()-Ausgaben auf einer Live-Webseite sind ein Sicherheitsrisiko. Sie können interne Datenstrukturen offenlegen: Datenbankfelder, Session-Inhalte, API-Schlüssel oder Dateipfade. Ein Angreifer erhält dadurch wertvolle Informationen über deine Anwendung.

<?php

/* FALSCH: Debug-Ausgabe auf
der Live-Webseite */
echo '<pre>';
print_r($_SESSION);
echo '</pre>';
/* Zeigt Session-Daten oeffentlich! */

/* RICHTIG: In die Logdatei
schreiben */
error_log(
'Session: '
. print_r($_SESSION, true)
);

Faustregel: Verwende print_r() direkt nur während der Entwicklung. In Produktion immer den Return-Modus mit error_log() nutzen. Stelle sicher, dass display_errors in der php.ini auf Off steht.

Entscheidungshilfe: print_r() vs. var_dump() vs. var_export()

PHP bietet mehrere Funktionen zur Ausgabe von Variablen. Jede hat ihre Stärke für einen bestimmten Einsatzzweck.

Funktion Zeigt Typen Lesbarkeit Return-Modus Bester Einsatz
print_r() Nein Sehr gut Ja Logging, schnelle Inspektion
var_dump() Ja Gut Nein* Detailliertes Debugging
var_export() Nein Gut Ja Code-Generierung, Caching

* var_dump() hat keinen eingebauten Return-Modus. Du kannst aber ob_start() und ob_get_clean() verwenden, um die Ausgabe abzufangen.

Empfehlung je nach Situation:

  • Schneller Blick auf Array-Inhalte: print_r(). Kompakt und übersichtlich.
  • Typfehler aufspüren: var_dump(). Zeigt dir, ob ein Wert "42" (String) oder 42 (Integer) ist.
  • Logdatei schreiben: error_log(print_r($var, true)). Der Return-Modus macht print_r() hier zur besten Wahl.
  • Daten als PHP-Code speichern: var_export(). Erzeugt gültigen PHP-Code für Konfigurationsdateien.
<?php

$aTest = ['name' => 'Test', 'aktiv' => true];

/* print_r: kompakt, keine Typen */
print_r($aTest);
/* Array ( [name] => Test
[aktiv] => 1 ) */

/* var_dump: mit Typen und Laenge */
var_dump($aTest);
/* array(2) {
["name"]=> string(4) "Test"
["aktiv"]=> bool(true)
} */

/* var_export: gueltiger PHP-Code */
var_export($aTest);
/* array ( 'name' => 'Test',
'aktiv' => true, ) */

Moderne Alternativen zum Debugging

print_r() ist ein bewährtes Werkzeug, aber für professionelle Entwicklung gibt es leistungsfähigere Alternativen.

Xdebug: Step-Debugging in der IDE

Xdebug ist eine PHP-Extension, die dir ermöglicht, Code Zeile für Zeile in deiner IDE (z.B. PhpStorm, VS Code) durchzugehen. Du kannst Breakpoints setzen und den Inhalt jeder Variable in Echtzeit inspizieren, ohne eine einzige Zeile Debug-Code zu schreiben. Für professionelle Entwicklung ist Xdebug die beste Lösung.

Symfony VarDumper und dd()

Das Paket symfony/var-dumper bietet mit dump() und dd() eine farbige, klappbare HTML-Ausgabe, die print_r() und var_dump() in jeder Hinsicht überlegen ist. In Laravel ist es standardmäßig enthalten.

/* Installation: */

// composer require symfony/var-dumper

/* Verwendung: */
dump($aWarenkorb);
/* Farbige, klappbare Ausgabe */

dd($aWarenkorb);
/* Dump and Die: Ausgabe +
Script-Abbruch */

JSON als Debug-Ausgabe

In API-Kontexten oder bei AJAX-Requests ist json_encode() mit JSON_PRETTY_PRINT oft praktischer als print_r(), weil die Ausgabe direkt im Browser-Netzwerk-Tab lesbar ist.

<?php

$aDaten = ['status' => 'ok', 'count' => 5];

/* Fuer API-Debugging: */
header('Content-Type: application/json');
echo json_encode(
$aDaten,
JSON_PRETTY_PRINT
);

Häufige Fragen (FAQ)

Hier findest du Antworten auf die am häufigsten gestellten Fragen zu print_r().

Kann man mehr als eine Variable mit print_r() ausgeben?

print_r() akzeptiert immer nur eine Variable pro Aufruf. Wenn du mehrere Variablen inspizieren willst, rufe die Funktion mehrfach auf oder packe die Variablen in ein Array: print_r(compact('var1', 'var2')).

Warum zeigt print_r() bei false und null nichts an?

print_r() gibt false als leeren String und null ebenfalls als nichts aus. Das ist ein bekanntes Verhalten. Verwende var_dump(), wenn du diese Werte sehen willst. var_dump(false) zeigt bool(false) und var_dump(null) zeigt NULL.

Was bedeutet *RECURSION* in der Ausgabe?

Diese Meldung erscheint, wenn ein Array oder Objekt auf sich selbst verweist (zirkuläre Referenz). print_r() erkennt die Rekursion und bricht ab, statt in eine Endlosschleife zu geraten. Das ist kein Fehler, sondern ein Schutzmechanismus.

Wann print_r() statt var_dump()?

Verwende print_r(), wenn du einen schnellen, übersichtlichen Blick auf Array-Inhalte brauchst oder die Ausgabe per error_log() in eine Logdatei schreiben willst. Verwende var_dump(), wenn du Typinformationen brauchst (z.B. ob ein Wert String oder Integer ist).

Zusammenfassung

print_r() ist eines der meistgenutzten Debugging-Werkzeuge in PHP. Die Funktion zeigt den Inhalt von Arrays und Objekten in einem menschenlesbaren Format an. Mit dem Return-Modus (print_r($var, true)) kannst du die Ausgabe als String speichern und per error_log() sicher in Logdateien schreiben.

Für die tägliche Arbeit merke dir drei Dinge: Erstens, verwende <pre>-Tags für formatierte Browser-Ausgaben. Zweitens, nutze den Return-Modus mit error_log() für Produktions-Debugging. Drittens, verwende var_dump(), wenn du Typinformationen brauchst, und var_export(), wenn du gültigen PHP-Code erzeugen willst.

 

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.