(@Brad Lowry möchte etwas mit Ihnen teilen. Ich habe seinen Text buchstäblich kopiert, ohne in irgendeiner Weise zum Inhalt beigetragen zu haben.): Es gibt zwei Unterschiede zwischen print_r()und var_dump(). var_dump()kann mehrere $expressionParameter annehmen (kein Problem). Allerdings print_r()hat einen optionalen Parameter , $returnwelche standardmäßig auf FALSE, kann aber auf TRUE gesetzt werden , die die Funktion ‚Rückkehr‘ die aus eher setzen macht , als es einfach auszudrücken. Dies kann sehr nützlich sein, wenn Sie das print_r()Ergebnis sammeln und dann in einem Entwicklerblock am Ende Ihrer Ausgabe ausdrücken möchten .
Varocarbas
@varocarbas, "kann aber auf TRUE gesetzt werden" <- thx dafür.
Coisox
@Coisox Ehrlich gesagt erinnere ich mich nicht einmal an die genauen Gründe, warum ich das geschrieben habe (ich denke, dass jemand ohne ausreichenden Ruf versucht hat, diese Ideen durch das Posten einer neuen Antwort zu teilen, die ich im Rahmen meiner Moderationspflichten gelöscht habe), aber es ist so klar, dass Sie eher Brad Lowry als mir danken sollten. Selbst ohne mich an diesen genauen Moment zu erinnern und meinen klaren Hinweis auf den wirklichen Autor zu ignorieren, kann ich Ihnen sagen, dass ich keinen Teil dieses Textes sicher geschrieben habe.
Varocarbas
Die Verwendung des zweiten optionalen Arguments ist unglaublich! Für ein $ product-Objekt in einem Webshop kann ich jetzt print_r($products,True)anstelle der get_object_vars($product)Debug-Protokollierung über verwenden error_log(...,0). Und man erhält zusätzlich die Schlüsselwerte der Objektvariablen, die in meinem Fall als assoziatives Array organisiert sind. Ich habe mich gefragt, warum print_r ($ product) als Ergebnis 1 zurückgegeben hat. Vielen Dank an Brad Lowry!
feli_x
Ein Hinweis bei der Verwendung von print_r zum Debuggen: Verwenden Sie es immer mit dem zweiten Argument, das als true angegeben ist, um Fehler zu vermeiden. ZB error_log("print_r(\$product) = ".print_r($product),0);verursachte in meinem Fall einen Fehler in einem Connector-Skript, während error_log("print_r(\$product,true) = ".print_r($product,true),0);es in Ordnung war. (Und gab auch die gewünschte Ausgabe :-)
feli_x
Antworten:
100
<?php var_dump(obj) ?>
oder
<?php print_r(obj) ?>
Dies sind die gleichen Dinge, die Sie auch für Arrays verwenden.
Diese zeigen geschützte und private Eigenschaften von Objekten mit PHP 5. Statische Klassenmitglieder werden gemäß Handbuch nicht angezeigt.
Um weitere Informationen zu erhalten, verwenden Sie diese benutzerdefinierte TO-Funktion ($ someObject):
Ich habe diese einfache Funktion geschrieben, die nicht nur die Methoden eines bestimmten Objekts anzeigt, sondern auch dessen Eigenschaften, Kapselung und einige andere nützliche Informationen wie Versionshinweise, falls angegeben.
functionTO($object){ //Test Objectif(!is_object($object)){
thrownewException("This is not a Object");
return;
}
if(class_exists(get_class($object), true)) echo"<pre>CLASS NAME = ".get_class($object);
$reflection = new ReflectionClass(get_class($object));
echo"<br />";
echo $reflection->getDocComment();
echo"<br />";
$metody = $reflection->getMethods();
foreach($metody as $key => $value){
echo"<br />". $value;
}
echo"<br />";
$vars = $reflection->getProperties();
foreach($vars as $key => $value){
echo"<br />". $value;
}
echo"</pre>";
}
Um Ihnen zu zeigen, wie es funktioniert, werde ich jetzt eine zufällige Beispielklasse erstellen. Erstellen Sie eine Klasse namens Person und platzieren Sie einige Versionshinweise direkt über der Klassendeklaration:
/**
* DocNotes - This is description of this class if given else it will display false
*/classPerson{
private $name;
private $dob;
private $height;
private $weight;
privatestatic $num;
function__construct($dbo, $height, $weight, $name) {
$this->dob = $dbo;
$this->height = (integer)$height;
$this->weight = (integer)$weight;
$this->name = $name;
self::$num++;
}
publicfunctioneat($var="", $sar=""){
echo $var;
}
publicfunctionpotrzeba($var =""){
return $var;
}
}
Jetzt erstellen wir eine Instanz einer Person und schließen sie mit unserer Funktion ein.
$Wictor = new Person("27.04.1987", 170, 70, "Wictor");
TO($Wictor);
Dadurch werden Informationen zum Klassennamen, zu Parametern und Methoden ausgegeben, einschließlich Kapselungsinformationen und Anzahl der Parameter, Namen der Parameter für jede Methode, Methodenposition und Codezeilen, in denen sie vorhanden sind. Siehe die Ausgabe unten:
Um die Objekteigenschaften zu kennen, ist var_dump (Objekt) der beste Weg. Es werden alle damit verbundenen öffentlichen, privaten und geschützten Eigenschaften angezeigt, ohne den Klassennamen zu kennen.
Aber im Falle von Methoden müssen Sie den Klassennamen kennen, sonst denke ich, dass es schwierig ist, alle zugehörigen Methoden des Objekts zu erhalten.
print_r()
undvar_dump()
.var_dump()
kann mehrere$expression
Parameter annehmen (kein Problem). Allerdingsprint_r()
hat einen optionalen Parameter ,$return
welche standardmäßig auf FALSE, kann aber auf TRUE gesetzt werden , die die Funktion ‚Rückkehr‘ die aus eher setzen macht , als es einfach auszudrücken. Dies kann sehr nützlich sein, wenn Sie dasprint_r()
Ergebnis sammeln und dann in einem Entwicklerblock am Ende Ihrer Ausgabe ausdrücken möchten .print_r($products,True)
anstelle derget_object_vars($product)
Debug-Protokollierung über verwendenerror_log(...,0)
. Und man erhält zusätzlich die Schlüsselwerte der Objektvariablen, die in meinem Fall als assoziatives Array organisiert sind. Ich habe mich gefragt, warum print_r ($ product) als Ergebnis 1 zurückgegeben hat. Vielen Dank an Brad Lowry!error_log("print_r(\$product) = ".print_r($product),0);
verursachte in meinem Fall einen Fehler in einem Connector-Skript, währenderror_log("print_r(\$product,true) = ".print_r($product,true),0);
es in Ordnung war. (Und gab auch die gewünschte Ausgabe :-)Antworten:
<?php var_dump(obj) ?>
oder
<?php print_r(obj) ?>
Dies sind die gleichen Dinge, die Sie auch für Arrays verwenden.
Diese zeigen geschützte und private Eigenschaften von Objekten mit PHP 5. Statische Klassenmitglieder werden gemäß Handbuch nicht angezeigt.
Wenn Sie die Mitgliedsmethoden kennen möchten, können Sie get_class_methods () verwenden :
$class_methods = get_class_methods('myclass'); // or $class_methods = get_class_methods(new myclass()); foreach ($class_methods as $method_name) { echo "$method_name<br/>"; }
Verwandte Sachen:
get_object_vars ()
get_class_vars ()
get_class () <- für den Namen der Instanz
quelle
Da noch niemand einen OO-Ansatz angegeben hat, ist dies hier der Fall.
class Person { public $name = 'Alex Super Tramp'; public $age = 100; private $property = 'property'; } $r = new ReflectionClass(new Person); print_r($r->getProperties()); //Outputs Array ( [0] => ReflectionProperty Object ( [name] => name [class] => Person ) [1] => ReflectionProperty Object ( [name] => age [class] => Person ) [2] => ReflectionProperty Object ( [name] => property [class] => Person ) )
Der Vorteil bei der Verwendung von Reflektion besteht darin, dass Sie nach der Sichtbarkeit der Eigenschaft wie folgt filtern können:
Da die Person :: $ -Eigenschaft privat ist, wird sie beim Filtern nach IS_PRIVATE zurückgegeben:
//Outputs Array ( [0] => ReflectionProperty Object ( [name] => property [class] => Person ) )
Lesen Sie die Dokumente!
quelle
Wenn Sie weitere Informationen wünschen, können Sie eine ReflectionClass verwenden:
http://www.phpro.org/manual/language.oop5.reflection.html
quelle
Versuchen Sie es mit Pretty Dump. Es funktioniert hervorragend für mich
quelle
Um weitere Informationen zu erhalten, verwenden Sie diese benutzerdefinierte TO-Funktion ($ someObject):
Ich habe diese einfache Funktion geschrieben, die nicht nur die Methoden eines bestimmten Objekts anzeigt, sondern auch dessen Eigenschaften, Kapselung und einige andere nützliche Informationen wie Versionshinweise, falls angegeben.
function TO($object){ //Test Object if(!is_object($object)){ throw new Exception("This is not a Object"); return; } if(class_exists(get_class($object), true)) echo "<pre>CLASS NAME = ".get_class($object); $reflection = new ReflectionClass(get_class($object)); echo "<br />"; echo $reflection->getDocComment(); echo "<br />"; $metody = $reflection->getMethods(); foreach($metody as $key => $value){ echo "<br />". $value; } echo "<br />"; $vars = $reflection->getProperties(); foreach($vars as $key => $value){ echo "<br />". $value; } echo "</pre>"; }
Um Ihnen zu zeigen, wie es funktioniert, werde ich jetzt eine zufällige Beispielklasse erstellen. Erstellen Sie eine Klasse namens Person und platzieren Sie einige Versionshinweise direkt über der Klassendeklaration:
/** * DocNotes - This is description of this class if given else it will display false */ class Person{ private $name; private $dob; private $height; private $weight; private static $num; function __construct($dbo, $height, $weight, $name) { $this->dob = $dbo; $this->height = (integer)$height; $this->weight = (integer)$weight; $this->name = $name; self::$num++; } public function eat($var="", $sar=""){ echo $var; } public function potrzeba($var =""){ return $var; } }
Jetzt erstellen wir eine Instanz einer Person und schließen sie mit unserer Funktion ein.
$Wictor = new Person("27.04.1987", 170, 70, "Wictor"); TO($Wictor);
Dadurch werden Informationen zum Klassennamen, zu Parametern und Methoden ausgegeben, einschließlich Kapselungsinformationen und Anzahl der Parameter, Namen der Parameter für jede Methode, Methodenposition und Codezeilen, in denen sie vorhanden sind. Siehe die Ausgabe unten:
CLASS NAME = Person /** * DocNotes - This is description of this class if given else it will display false */ Method [ public method __construct ] { @@ C:\xampp\htdocs\www\kurs_php_zaawansowany\index.php 75 - 82 - Parameters [4] { Parameter #0 [ $dbo ] Parameter #1 [ $height ] Parameter #2 [ $weight ] Parameter #3 [ $name ] } } Method [ public method eat ] { @@ C:\xampp\htdocs\www\kurs_php_zaawansowany\index.php 83 - 85 - Parameters [2] { Parameter #0 [ $var = '' ] Parameter #1 [ $sar = '' ] } } Method [ public method potrzeba ] { @@ C:\xampp\htdocs\www\kurs_php_zaawansowany\index.php 86 - 88 - Parameters [1] { Parameter #0 [ $var = '' ] } } Property [ private $name ] Property [ private $dob ] Property [ private $height ] Property [ private $weight ] Property [ private static $num ]
quelle
Um die Objekteigenschaften zu kennen, ist var_dump (Objekt) der beste Weg. Es werden alle damit verbundenen öffentlichen, privaten und geschützten Eigenschaften angezeigt, ohne den Klassennamen zu kennen.
Aber im Falle von Methoden müssen Sie den Klassennamen kennen, sonst denke ich, dass es schwierig ist, alle zugehörigen Methoden des Objekts zu erhalten.
quelle