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)  

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";
}

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)); 

1

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

foreach ($obj as $key=>$value) {
    echo "$key => $obj[$key]\n";
}

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)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.