IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] Problème d'affichage d'objet


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 10
    Points : 3
    Points
    3
    Par défaut [POO] Problème d'affichage d'objet
    Bonjour,
    je débute en php5, et je rencontre un problème auquel je n'arrive pas à trouver de solutions.

    Je vous explique:
    J'ai deux classes: user.php et forum.php.
    La classe user va me servir à créer des utilisateurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <?php
     
    class user{
     
     private $id;
     private $nom;
     private $prenom;
    private $login;
     
     
      // Constructeur de la classe.
        function user($id,$nom,$prenom,$login) {
            $this->id = $id;
            $this->nom = $nom;
            $this->prenom = $prenom;
            $this->login = $login;
        }
     
         function __construct(){
         }
     
     
     
     
        // Méthode d'affichage de l'objet.
        function __tostring() {
            return 'user id: '.$this->id.'<br>'.'user nom: '.$this->nom.'<br>'.'user prenom: '.$this->prenom.'<br>'.'user login: '.$this->login.'<br>';
        }
    }
     
    ?>
    Dans la classe forum, je souhaite enregistrer un user entant qu'attribut:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
     
    class forum{
     
     private $name;
     private $user;
     
      // Constructeur de la classe.
        function __construct($name,user $user) {
     
            $this->name = $name;
            $this->user = $user;
        }
     
        // Méthode d'affichage de l'objet.
        function __tostring() {
            return 'forum: '.$this->name.'<br> user du forum: '.$this->user.'<br>';
        }
     
     
    }
    ?>
    Comme vous pouvez le constater je met mon user en parametre de mon constructeur afin de l'initialiser.

    Et voici ma page index.php, dans laquelle je fais mes créations:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
     
     function __autoload($class_name) {
        require_once $class_name . '.php';
    }
     
    $user=new user(0,"monNom","monPrenom","monLogin");
    $forum=new forum("forum1",$user);
     
    echo($forum);
    ?>
    Le problème est que cela ne m'affiche pas les informations du user qui a été créé.

    Pouvez vous m'expliquer pourquoi?
    merci

  2. #2
    Fabouney
    Invité(e)
    Par défaut
    Bonjour,

    piurquoi écrit tu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     function __construct($name,user $user) {
     
            $this->name = $name;
            $this->user = $user;
    }
    il est inutile et faux de préciser le type d'une variable passer en parametre à une méthode de classe en PHP, c'est pas comme en java, si tu lui passes tout simplement $user en paramètre PHP sait de quelle classe hérite $user, tu pourras donc accéder à ses attributs ... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function __construct($name,$user) {
     
          $this->name = $name;
          $this->user = $user;
    }
    et puis je pense tout simplement qu'il prend pas en comtpe la méthode __tostring de la clase users depuis la méthode __tostring de la classe forum fait des test intermédiaire.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    cela ne change pas, il est autorisé de mettre le type meme si ca ne sert a rien.
    J ai essayé hier ca mais ca n'a rien changé, j ai juste oublié de l'enlever.

    Le problème est qu'au lieu de m'afficher les caractéristiques de mon user, je vais avoir quelquechose du style, reference sur l' objet

  4. #4
    Fabouney
    Invité(e)
    Par défaut
    je suis d'accord, mais quand tu fait echo($forum) tu fait pas implicitement un echo($user). donc la methode __tostring() de la classe user n'est pas prise en compte.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    ok, mais il reconnait bien l'objet alors?
    Et si je souhaite afficher user, je dois faire un appel de toString sur user dans le toString de forum?

  6. #6
    Fabouney
    Invité(e)
    Par défaut
    il connaitra pas non plus, forum n'hérite pas des méthode de user. si tu veux savoir s'il connait bien l'object fait un var_dump($user) dans le constructeur de la classe forum et tu seras fixé.
    soit tu fait en sorte que forum hérite de user et dans ce cas tu auras accès à tout les attributs, méthode de user.
    mais déjà je vois pas dans quel but tu veux faire ceci et pourquoi tu tient tant à utiliser __tostring().

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    C'était juste pour voir.
    Au final, un forum aura plusieurs users, c'est tout.

    Je pensais que le user dans le forum n'était pas considérer comme un objet de classe user, et donc je pensais que je ne pouvais pas faire appel aux méthodes de user.
    Mais d'aprés toi, je pourrais faire appel aux méthodes de celle ci?

  8. #8
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Essai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return 'forum: '.$this->name.'<br> user du forum: '.(string)$this->user.'<br>';

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    je pense pas que ca va fonctionner, user etant un objet de type user et non une chaine

  10. #10
    Fabouney
    Invité(e)
    Par défaut
    il va affiche "Object" certaienment si tu cast en string.

  11. #11
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    je pense pas que ca va fonctionner, user etant un objet de type user et non une chaine
    Oui mais tu as définis la méthode __toString() dans la class user et celle-ci est censée être appelée lors des string casts.

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    est il possible de le recaster en user et d'appeler la methode __toString dessus?

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    si je change une méthode de la classe forum

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
    class forum{
     
     private $name;
     private $user;
     
      // Constructeur de la classe.
        function forum($name,$user) {
            $this->name = $name;
            $this->user = $user;
        }
     
        // Méthode d'affichage de l'objet.
        function __tostring() {
            return '<br>userID: '.$this->user->getUserId().'<br>';
        }
    }
    ?>

    dans ce cas la $this->user->getUserId() est vide.
    C'est ca en fait que je ne comprends pas.

    Pourquoi $this->user ne vaut pas $user alors que dans le constructeur je fais bien l'égalité.

  14. #14
    Membre confirmé Avatar de goodpz
    Profil pro
    Inscrit en
    Février 2007
    Messages
    475
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 475
    Points : 514
    Points
    514
    Par défaut
    Dans le premier post, on voit que ta class user définit la fonction user() et __construct(). Lors de la création d'un nouveau user avec new, c'est la fonction __construct() qui est appelée et celle-ci est vide (d'après le code).

    Utilise uniquement __construct() et ça devrait être ok

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Après avoir poser la même question sur un autre forum PHP,
    Il s'avère que mon code était bon et que cela est du à un problème avec wamp.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'affichage des objets graphiques
    Par Johngtrs dans le forum Android
    Réponses: 19
    Dernier message: 31/03/2013, 18h44
  2. Problème d'affichage d'objets dans un 'Screen'
    Par Euphoria S' dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 31/01/2013, 14h46
  3. Réponses: 5
    Dernier message: 18/12/2009, 17h05
  4. Réponses: 0
    Dernier message: 19/11/2009, 17h16
  5. Problème d'affichage perso-objets (moteur isométrique)
    Par swain.dakota dans le forum Développement 2D, 3D et Jeux
    Réponses: 7
    Dernier message: 14/07/2009, 16h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo