web-dev-qa-db-fra.com

Get_Object_vars () vs casting to tableau

Y a-t-il des différences entre get_object_vars($obj) et (array) $obj?

Les deux semblent renvoyer les propriétés publiques de l'objet.

Ce qui est mieux?

38
scribu

Ce n'est pas vraiment vrai.

get_object_vars est sensible à la portée et retournera tous visible Propriétés sauf statique propriétés quelle que soit leur faisabilité. Si vous l'appelez à l'extérieur de votre classe, vous obtiendrez uniquement les membres du public; D'une classe dérivée, vous obtiendrez les membres protégés et publics; Et de la classe elle-même, vous obtiendrez tous les membres. Les touches de tableau représentent les noms de propriété et ne sont pas mutilés.

Les (array) Retours de moulage, au moins sur PHP 5.3.0, toutes les propriétés d'objet, public et sinon. Le nom des propriétés est mutilé en fonction de leur niveau de protection:

  • public: non mutilé, identique aux noms de propriété
  • protected: nom de clé pour la propriété commence par un *
  • private: nom de clé pour la propriété commence avec le nom de la classe

Voir Casting à un tablea Pour plus d'informations.

J'espère que vous serez capable de mieux comprendre lequel est le plus approprié pour votre situation.

48
zneak

Mieux vaut ce que vous avez réellement besoin. get_Object_vars () ne montre pas de membres privés et protégés. Voir Ce commentaire dans le manuel pour un exemple.

2
fuxia