Passando in rassegna tutte le proprietà dell'oggetto php


88

Come posso scorrere tutte le proprietà dell'oggetto ?. In questo momento devo scrivere una nuova riga di codice per stampare ogni proprietà dell'oggetto

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

Posso scorrere tutte le proprietà di un oggetto utilizzando il ciclo foreach o qualsiasi ciclo?

Qualcosa come questo

foreach ($obj as $property => $value)  

1
Vai avanti con il foreachciclo che stai facendo bene
Shakti Singh

6
Utilizzare un foreach(con =>not ->) per scorrere le proprietà pubbliche dell'oggetto . Puoi anche rendere la tua classe Traversabile se desideri un altro comportamento.
netcoder

@netcoder: grazie, ma solo un errore di battitura
Daric

2
come ha detto netcoder: saranno accessibili solo le proprietà pubbliche
Andreas

Risposte:


146

Se questo è solo per il debug dell'output, puoi usare quanto segue per vedere anche tutti i tipi e valori.

var_dump($obj);

Se vuoi un maggiore controllo sull'output puoi usare questo:

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

10
"Impossibile convertire in stringa l'oggetto della classe stdClass" potrebbe essere un errore risultante se l'oggetto non è un array.
atterrato il

print_r ($ obj); può anche aiutare. Stampa ricorsivamente i campi dell'oggetto specificato.
fandasson

9

A scopo di test utilizzo quanto segue:

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

2

A volte, è necessario elencare le variabili di un oggetto e non per scopi di debug. Il modo giusto per farlo è usare get_object_vars ($ object). Restituisce un array che ha tutte le variabili di classe e il loro valore. È quindi possibile eseguire il ciclo in un ciclo foreach. Se usato all'interno dell'oggetto stesso, fai semplicemente get_object_vars ($ this)


1

Ecco un altro modo per esprimere la proprietà dell'oggetto.

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

3
Funziona solo se l'oggetto implementa \ArrayAccesso è un array, altrimenti viene lanciato quanto segue:FATAL ERROR Uncaught Error: Cannot use object of type SomeType as array
NoodleOfDeath

0

Prima di eseguire $ object attraverso un ciclo foreach devi convertirlo in un array:

$array = (array) $object;  

 foreach($array as $key=>$val){
      echo "$key: $val";
      echo "<br>";
 }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.