Ci sono differenze tra get_object_vars($obj)
e (array) $obj
?get_object_vars() vs. cast all'array
Entrambi sembrano restituire le proprietà pubbliche dell'oggetto.
Quale è meglio?
Ci sono differenze tra get_object_vars($obj)
e (array) $obj
?get_object_vars() vs. cast all'array
Entrambi sembrano restituire le proprietà pubbliche dell'oggetto.
Quale è meglio?
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 classeVedere casting to an array per ulteriori informazioni.
Spero che sarete in grado di capire meglio qual è il più appropriato per la vostra situazione.
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.
Perché il cast dell'array deve essere meno affidabile del suo comportamento rispetto alla funzione? Avete documentazione a supporto? – zneak
Meglio è ciò che è effettivamente necessario. get_object_vars() non mostra membri privati e protetti. Vedere this comment nel manuale per un esempio.
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
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