Przechodzenie przez wszystkie właściwości obiektu php

84

Jak mogę przeglądać wszystkie właściwości obiektu? Teraz muszę napisać nową linię kodu, aby wydrukować każdą właściwość obiektu

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

Czy mogę przeglądać wszystkie właściwości obiektu przy użyciu pętli foreach lub dowolnej pętli?

Coś takiego

foreach ($obj as $property => $value)  
Daric
źródło
1
Idź głową z foreachpętlą, którą robisz dobrze
Shakti Singh
6
Użyj a foreach(z =>not ->), aby iterować po właściwościach publicznych obiektu . Możesz także ustawić swoją klasę jako zmienną, jeśli chcesz innego zachowania.
netcoder
@netcoder: dzięki, ale to była tylko literówka
Daric
2
jak powiedział netcoder: dostępne będą tylko nieruchomości publiczne
Andreas,

Odpowiedzi:

139

Jeśli służy to tylko do debugowania danych wyjściowych, możesz użyć następujących elementów, aby zobaczyć również wszystkie typy i wartości.

var_dump($obj);

Jeśli chcesz mieć większą kontrolę nad wyjściem, możesz użyć tego:

foreach ($obj as $key => $value) {
    echo "$key => $value\n";
}
David Harkness
źródło
9
„Nie można przekonwertować obiektu klasy stdClass na łańcuch” może być błędem wynikowym, jeśli obiekt nie jest tablicą.
wylądował
print_r ($ obj); może również pomóc. Wyświetla rekurencyjnie pola danego obiektu.
fandasson
8

Do celów testowych używam:

//return assoc array when called from outside the class it will only contain public properties and values 
var_dump(get_object_vars($obj)); 
Dimi
źródło
1

Oto inny sposób wyrażenia właściwości obiektu.

foreach ($obj as $key=>$value) {
    echo "$key => $obj[$key]\n";
}
Budove
źródło
2
Działa to tylko wtedy, gdy obiekt implementuje \ArrayAccesslub jest an array, w przeciwnym razie wyrzucany jest następujący komunikat:FATAL ERROR Uncaught Error: Cannot use object of type SomeType as array
NoodleOfDeath
1

Czasami trzeba wymienić zmienne obiektu, a nie do celów debugowania. Właściwym sposobem jest użycie get_object_vars ($ object). Zwraca tablicę zawierającą wszystkie zmienne klasowe i ich wartości. Następnie możesz je zapętlić w pętli foreach. Jeśli jest używany w samym obiekcie, po prostu wykonaj get_object_vars ($ this)

JG Estiot
źródło