Output all the things: PHP-Debug mit printvar

← Zurück zur Übersicht
Rastatt, 12.11.2014

Manche Leute haben ziemlich schicke PHP-Debugger zur Verfügung, setzen in ihren Eclipse-Arbeitsumgebungen einen Breakpoint und inspizieren die Programmvariablen. Das weicht leider von einer Arbeitswirklichkeit als “Mädchen für alles” ab, wo man in der Regel am offenen Herzen per FTP an den Kundendomains arbeitet und tatsächliche Prozesse prüfen muss.

Jeder, der so mit PHP arbeitet, nutzt vermutlich in irgendeiner Form print_r() oder var_dump(), um sich auch die Inhalte von Arrays und Objekten anzeigen zu lassen.

Von meinem Arbeitgeber abgeschaut und auch bei privaten Projekten gerne im Einsatz ist folgende Funktion namens printvar(), die per print_r() die übergebene Variable ausgibt und dabei noch einen <pre>-Block darum setzt, damit das Ganze hübsch im Monospace-Font gedruckt wird.

function printvar($var) {
    echo '<pre>';
    print_r($var);
    echo '</pre>';
}

Das ist schön und gut, wenn man sich mal kurz eine Variable auf den Bildschirm werfen will, um zu verstehen, was nun schon wieder schiefläuft. Manchmal will man aber auch in einem Aufwasch den Inhalt mehrerer Variablen anzeigen. Man kann dann entweder mehrere printvar()-Aufrufe hintereinander setzen oder aus den Bestandteilen ein Array formen:

printvar(array($var1, $var2, $var3));

Hübscher ist es, wenn man sich zunutze macht, dass PHP auch eine variable Anzahl von Funktionsparametern unterstützt. Printvar 2.0 sieht folgendermaßen aus:

function printvar() {
    echo '<pre>';
    $args = func_get_args();
    foreach ($args as $a) {
        print_r($a);
    }
    echo '</pre>';
}

Der Aufruf erfolgt dann einfach nur noch mit:

printvar($var1, $var2, $var3);

Der ultimative Debug-Kick stellt sich ein, wenn man auch noch eine irgendwie global gesetzte Debug-IP einbindet, damit der unbedarfte Kunde nicht auf einmal den halben Programminhalt vorgeworfen kriegt. Die finale Version von Printvar sieht dann so aus (vorausgesetzt, die Debug-IP wird als globale Konstante DEBUG_IP definiert):

function printvar() {
    if (DEBUG_IP == $_SERVER['REMOTE_ADDR']) {
        echo '<pre>';
        $args = func_get_args();
        foreach ($args as $a) {
            print_r($a);
        }
        echo '</pre>';
    }
}

Voila! Aber Vorsicht: Man gewöhnt sich so schnell an das Vorhandensein von printvar(), dass man bald nicht mehr ohne kann 😉

Creative Commons Lizenzvertrag
Dieses Werk ist lizenziert unter einer Creative Commons Namensnennung 4.0 International Lizenz.