Ich habe ein unbekanntes Objekt in der PHP-Seite.
Wie kann ich es drucken / wiedergeben, damit ich sehen kann, welche Eigenschaften / Werte es hat?
Was ist mit Funktionen? Gibt es eine Möglichkeit zu wissen, welche Funktionen ein Objekt hat?
Ich habe ein unbekanntes Objekt in der PHP-Seite.
Wie kann ich es drucken / wiedergeben, damit ich sehen kann, welche Eigenschaften / Werte es hat?
Was ist mit Funktionen? Gibt es eine Möglichkeit zu wissen, welche Funktionen ein Objekt hat?
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!
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 :-)
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_class () <- für den Namen der Instanz
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:
print_r($r->getProperties(ReflectionProperty::IS_PRIVATE));
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!
var_dump($obj);
Wenn Sie weitere Informationen wünschen, können Sie eine ReflectionClass verwenden:
Versuchen Sie es mit Pretty Dump. Es funktioniert hervorragend für mich
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 ]
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 .