Page 1 sur 1

Problème d'accès aux données dans un objet

Posté : 07 oct. 2013, 20:49
par bostak
Bonjour,

J'ai un petit soucis avec les objets qui me bloquent un peu trop souvent à mon goût, je vous explique :
Je fais une requête en base sur un id (avec doctrine) qui me renvoie un objet contenu dans $requetes, jusqu'à la tout va bien, le problème est que je ne peux accéder aux données contenus dans cette objet car voici le rendu (approximatif) si je fais un var_dump de l'objet :
protected 'name' => (string) 'foo'
protected 'username' => (string) 'bar'
Les variables sont en proctected donc si j'essaie d'y accéder en faisant $requetes->name, j'obtiens une erreur comme quoi j'appelle une méthode protected donc je ne peux rien en faire, sauf que je ne comprend pas vraiment pourquoi car les données sont bien contenu dans l'objet que me renvoie ma requête, je les vois très bien quand je var_dump mon objet alors pourquoi je ne peux tout de même pas y avoir accès ?

Merci à tous ceux qui prendront le temps de m'éclaircir sur ce point.

Bien cordialement,

Re: Problème d'accès aux données dans un objet

Posté : 07 oct. 2013, 22:50
par Genova
Normalement tu dois avoir des getters : $user->getName(), $user->getUsername().

Re: Problème d'accès aux données dans un objet

Posté : 08 oct. 2013, 00:03
par bostak
Oui mais comme je le disais les méthodes sont en protected, mais puisque ma requête renvoie un objet contenant tous les éléments (stockés dans la variable $requetes) pourquoi je ne peux pas y accéder de la manière suivante $requetes->name;

Bien cordialement,

Re: Problème d'accès aux données dans un objet

Posté : 08 oct. 2013, 00:17
par Genova
Lorsqu'une propriété est "protected", cela signifie que tu ne peux y accéder que depuis l'intérieur de sa classe. Pour y accéder comme tu le fais, il faut utiliser le mot clef "public" au lieu de "protected". C'est une bonne pratique de protéger ses variables et d'avoir des setter / getter dans tes entités.

Donc au choix, soit tu rends tes propriétés publiques en modifiant les entités, soit tu ajoutes les getter et setter. Il faut aller voir directement dans l'entité (la classe) de ton User pour voir ce qu'elle contient.
/**
 * @Entity
 */
class User
{
   protected $name;

   public function setName($name)
   {
      $this->name = $name;
   }

   public function getName()
   {
      return $this->name;
   }
}
++

Re: Problème d'accès aux données dans un objet

Posté : 08 oct. 2013, 00:25
par bostak
Bonsoir,

Je suis bien d'accord avec vous mais ce que je ne comprend pas c'est que j'arrive à récupérer l'objet avec tous les éléments qu'ils contient lorsque je le var_dump alors que celui ci est dans une class différente d'où mon incompréhension.

Bien cordialement,

Re: Problème d'accès aux données dans un objet

Posté : 08 oct. 2013, 00:29
par Genova
var_dump() est une aide au débogage, il va afficher les propriétés protégées pour vous aider mais en aucun cas vous ne pourrez y accéder directement en faisant $objet->propriete. S'il ne les affichait pas, ce serait très pénible de déboguer du code en objet.

Re: Problème d'accès aux données dans un objet

Posté : 08 oct. 2013, 00:36
par bostak
D'accord merci beaucoup pour votre explication. Je comprends mieux maintenant