Hallo dedlfix,
hmm, ... sollte ich schon wieder was überlesen haben? Ich glaubte, auf diesen Satz des Threaderöffners zu antworten:
Gibt es weitere Prüfmethoden für PHP-Code? Z.B. für arrays, variablen und so weiter...
Ich bezog mich also aufs __Prüfen__ und nicht aufs __Anzeigen__ von Variablen-Inhalten oder -Typen ...
var_dump funktioniert auch mit "Einzelvariablen" und ist in der Regel völlig ausreichend.
Ist mir bekannt, das tut print_r() übrigens auch.
Der von debug_zval_dump() zusätzlich ausgegebene Referenzcounter ist in der Regel uninteressant.
Das interessiert mich unter Umständen durchaus. Auch var_dump() weist bei der Ausgabe von Array-Elementen (laut User-Contributions aber nur dort) dezent mit einem "&" vor dem Variablennamen auf einen Referenz-Counter größer als 1 hin ...
Und, um Typen von Variablen zu prüfen:
gettype()
var_dump() zeigt auch den Typ an.
Ja aber nicht den Typ alleine. Wenn ich lediglich __prüfen__ will, ob (m)eine Funktion den richtigen Typ zurückliefert, dann interessiert mich der Inhalt der Variablen eher weniger ...
Auch für Ausdrücke und zum Anzeigen von Funktionsergebnissen lässt sich var_dump() sehr gut verwenden.
Deine Liebe zu var_dump() in allen Ehren, aber eine Funktion, die ihre Ausgaben lediglich in den Ausgabepuffer schreiben kann, ist als Debugging-Hilfe allein ziemlich ungeeignet -- denn in ein Error-Logfile kann man so (ohne Umwege) nicht schreiben. Bliebe noch die Ausgabe im Browser: Dort produziert es in der HTML-Darstellung Buchstabensalat. print_r() kann seine Ausgabe wenigstens in einen String umleiten.
Die erste Maßnahme wäre daher, sich eine Wrapper-Funktion zu schreiben, die zumindest das Umleiten der Ausgabe in eine String-Variable erlaubt -- damit man var_dump() auch benutzen kann:
function vdump(
$var,
$write_to_string = FALSE
) {
ob_start();
var_dump($var);
$out = ob_get_contents();
ob_end_clean();
// für formatierte HTML-Ausgabe:
//$out = '<pre>'.preg_replace( array('/&/', '/\</', '/\>/'),array('&', '<', '>'), $out ).'</pre>';
if(FALSE !== $write_to_string) return($out);
print($out);
return(TRUE);
}
Außerdem kann var_dump() nicht wirklich mit zirkulären Referenzen umgehen. Es "erkennt" sie erst im "zweiten Durchgang" und zeigt sie auch nicht an. Das kann, so wie es aussieht, nur print_r() richtig, wie man an der Ausgabe, die folgender Quelltext erzeugt, deutlich sieht:
<?php
var_dump($GLOBALS);
print_r($GLOBALS);
?>
MffG
EisFuX
... Suchmaschinen-Blog ...