Durchlaufen aller Eigenschaften des Objekts php

83

Wie kann ich alle Eigenschaften eines Objekts durchlaufen? Im Moment muss ich eine neue Codezeile schreiben, um jede Eigenschaft des Objekts zu drucken

echo $obj->name;
echo $obj->age;

Kann ich mit foreach loop oder einer beliebigen Schleife alle Eigenschaften eines Objekts durchlaufen?

Etwas wie das

foreach ($obj as $property => $value)  
Daric
quelle
1
Gehen Sie Kopf mit foreachSchleife, die Sie richtig machen
Shakti Singh
6
Verwenden Sie ein foreach(mit =>nicht ->), um die öffentlichen Eigenschaften des Objekts zu durchlaufen . Sie können Ihre Klasse auch verfahrbar machen, wenn Sie ein anderes Verhalten wünschen.
Netcoder
@netcoder: danke, aber das war nur ein Tippfehler
Daric
2
wie netcoder sagte: nur werden öffentliche Eigenschaften zugänglich sein
Andreas

Antworten:

136

Wenn dies nur zum Debuggen der Ausgabe dient, können Sie Folgendes verwenden, um auch alle Typen und Werte anzuzeigen.

var_dump($obj);

Wenn Sie mehr Kontrolle über die Ausgabe wünschen, können Sie Folgendes verwenden:

foreach ($obj as $key => $value) {
    echo "$key => $value\n";
}
David Harkness
quelle
9
"Objekt der Klasse stdClass konnte nicht in Zeichenfolge konvertiert werden" kann durchaus zu einem Fehler führen, wenn das Objekt kein Array ist.
landete
print_r ($ obj); kann auch helfen. Druckt die Felder eines bestimmten Objekts rekursiv.
Fandasson
7

Zu Testzwecken verwende ich Folgendes:

//return assoc array when called from outside the class it will only contain public properties and values 
var_dump(get_object_vars($obj)); 
Dimi
quelle
1

Hier ist eine andere Möglichkeit, die Objekteigenschaft auszudrücken.

foreach ($obj as $key=>$value) {
    echo "$key => $obj[$key]\n";
}
Budove
quelle
2
Dies funktioniert nur, wenn das Objekt implementiert \ArrayAccessoder ein ist array, andernfalls wird Folgendes ausgelöst:FATAL ERROR Uncaught Error: Cannot use object of type SomeType as array
NoodleOfDeath
1

Manchmal müssen Sie die Variablen eines Objekts auflisten und nicht zu Debugging-Zwecken. Der richtige Weg, dies zu tun, ist die Verwendung von get_object_vars ($ object). Es gibt ein Array zurück, das alle Klassenvariablen und ihren Wert enthält. Sie können sie dann in einer foreach-Schleife durchlaufen. Wenn Sie innerhalb des Objekts selbst verwendet werden, führen Sie einfach get_object_vars ($ this) aus.

JG Estiot
quelle