Comment transformer un objet en Array

Petit nouveau ! | 2 Messages

27 mars 2009, 12:03

Bonjour,


Je n'ai pas trouvé de fonction toute faite permettant de transformer un objet en array.
Par exemple un objet "Ami" ayant pour attribut :

ami->nom="jhon";
ami->prenom="smith";
ami->ville="Lille";

Je voudrais savoir si une fonction existante sous php5 me retournerait
un tableau de type key value :
$tb["nom"]="jhon";
$tb["prenom"]="smith";
etc...

(en fait je dois passer un tableau dans un requête SOAP et en entrée j'ai des objets ;) )
Merci

ViPHP
ViPHP | 2287 Messages

27 mars 2009, 12:11

Bonjour,

get_object_vars() tout simplement :-)
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

27 mars 2009, 23:25

Pire :
$array = (array) $object

ViPHP
ViPHP | 4674 Messages

12 avr. 2009, 18:07

Hey :-),

Avec beauuucoup de retard : Object Iteration, ce qui t'évite de transformer ton objet en tableau :-).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

ViPHP
ViPHP | 928 Messages

16 avr. 2009, 20:25

J'aurais plutôt conseillé l'interface ArrayAccess à ce moment là, plutôt que Iteration qui permet plutôt l'utilisation de collections.

ViPHP
ViPHP | 3300 Messages

16 avr. 2009, 20:55

ou sinon get_object_vars qui te retourne un tableau avec les propriétés de ton objet, sans doute plus propre qu'un cast.
Fait du php depuis que ca existe ou presque :)

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

16 avr. 2009, 21:37

Alors oui en passant il y a une très grosse différence entre un cast et l'utilisation de get_object_vars(), qui a son importance :
- get_object_vars($objet) renvoie un tableau associatif des propriétés publiques de l'objet
- (array) $objet retourne un tableau associatif avec *toutes* les propriétés de l'objet. Par exemple si $objet a une propriété "variable" protected, on pourra y accéder par $array[chr(0).'*'.chr(0).'variable'].

Je me dois donc de moinsser ma précédente réponse : le cast est une solution à effets de bord qu'il faut prendre en compte !

ViPHP
ViPHP | 4674 Messages

17 avr. 2009, 09:24

Dans le lien que je propose, on voit que PHP permet de boucler sur certains attributs d'un objet, ce qui évite de le transformer en tableau. Par contre, si on continue notre lecture, on voit les interfaces Iterator et IteratorAggregate, mais ce n'était pas pour ça que je montrais le lien. Et ArrayAccess est différent de Iterator, on n'en a pas la même utilisation (c'est un avis personnel).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

ViPHP
ViPHP | 2287 Messages

17 avr. 2009, 11:32

Je me dois donc de moinsser ma précédente réponse : le cast est une solution à effets de bord qu'il faut prendre en compte !
Te moinsse pas trop vite, grâce à toi j'ai appris quelquechose ;-) Merci.

+1
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Petit nouveau ! | 1 Messages

24 mars 2012, 14:04

bonjour j'utile
- (array) $objet retourne un tableau associatif avec *toutes* les propriétés de l'objet.
pour une propriete protected
Par exemple si $objet a une propriété "variable" protected, on pourra y accéder par $array[chr(0).'*'.chr(0).'variable'].
Pour une propriete private
je ne parviens pas à y accéder

Code : Tout sélectionner

SoapFault Object ( [previous:Exception:private] => blablablablablabla )

Code : Tout sélectionner

Array ( [Exceptionprevious] => blablablablablabla )
le simple $montab["Exceptionprevious"]
ne fonctionne pas

Pour conclure la méthode $array = (array) $object
est elle toujours d actualité en php5
comment accéder à une ex propriété "private"

bonne journée

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

24 mars 2012, 15:06

salut,

une propriété privée n'a pas à être accédée directement depuis l'extérieur d'un objet (sinon ça sert à rien de la mettre privée hein :) ).

Perso j'aurais plutôt utilisé une méthode "toArray()" dans l'objet afi de filer les infos que l'on souhaite et pas autre chose.

Les solutions fournie ci dessus sont beaucoup plus générique c'est vrai mais tu balance aussi des infos qui ne sont pas forcément pertinente !

@+
Il en faut peu pour être heureux ......