2010-03-24 10 views

risposta

41

Questo non è esattamente vero.

get_object_vars è sensibile portata e tornerà tutti visibili proprietà eccetto statiche proprietà indipendentemente dalla loro visbility. Se lo chiami al di fuori della tua classe, riceverai solo i membri pubblici; da una classe derivata, otterrai i membri protetti e pubblici; e dalla classe stessa, riceverai tutti i membri. Le chiavi dell'array rappresentano i nomi delle proprietà e non sono mutilati.

Il cast (array) restituisce, almeno su PHP 5.3.0, tutte le proprietà dell'oggetto, pubbliche e non. Il nome delle proprietà vengono alterati in base al loro grado di protezione:

  • public: non alterati, identico a nomi di proprietà
  • protected: nome della chiave per la proprietà inizia con una *
  • private: nome della chiave per la proprietà inizia con il nome della classe

Vedere casting to an array per ulteriori informazioni.

Spero che sarete in grado di capire meglio qual è il più appropriato per la vostra situazione.

+7

Per aggiungere, per il cast '(array)', '*' per protected e * classname * per i membri privati ​​saranno racchiusi in null-byte ('\ x00'), quindi rigorosamente' \ x00 * \ x00 'per membri protetti e allo stesso modo per i membri privati:' \ x00className \ x00'. Correlati: ** [Array to Object e Object to Array in PHP - comportamento interessante] (http://stackoverflow.com/questions/6325447/array-to-object-and-object-to-array-in-php-interesting -behaviour/6325631 # 6325631) ** – hakre

+1

Un'altra differenza (almeno in PHP 5): con 'get_object_vars' le chiavi verranno convertite in int se sono numeri, dove casting restituisce indici stringa: https://3v4l.org/ 2Wb9j – Sherbrow

2

La funzione get_object_vars() è un metodo più chiaro per ottenere l'effetto desiderato. Anche se il casting su un array è una soluzione, questo comportamento potrebbe cambiare nelle versioni successive di PHP.

Non so se c'è una differenza effettiva tra i due metodi ma gli argomenti sopra riportati mi porteranno a utilizzare la funzione.

+2

Perché il cast dell'array deve essere meno affidabile del suo comportamento rispetto alla funzione? Avete documentazione a supporto? – zneak

1

Meglio è ciò che è effettivamente necessario. get_object_vars() non mostra membri privati ​​e protetti. Vedere this comment nel manuale per un esempio.