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

Bibliothèques et frameworks PHP Discussion :

[Smarty] Comment accéder aux propriétés d'un objet dans un objet ?


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre actif Avatar de Tanebisse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 449
    Points : 260
    Points
    260
    Par défaut [Smarty] Comment accéder aux propriétés d'un objet dans un objet ?
    Bonjour,
    J'utilise Smarty et je souhaite accéder aux propriétés d'un objet dans un objet ?
    J'ai essayé ça mais ça ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td>{$enfant->recupererPere()->getNom()}</td>

  2. #2
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    419
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2005
    Messages : 419
    Points : 532
    Points
    532
    Par défaut
    Normalement ça fonctionne.
    Es tu sûr que recupererPere() te retourne bien l'objet voulu ?

  3. #3
    Membre chevronné
    Avatar de eric.pommereau
    Homme Profil pro
    Ingénieur, pôle cartographie
    Inscrit en
    Décembre 2004
    Messages
    715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur, pôle cartographie
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2004
    Messages : 715
    Points : 1 790
    Points
    1 790
    Par défaut
    Il faut impérativement passer par un assign pour ce type d'instruction

    D'après leur Faq :

    Q: How can I access methods of a class that was returned by an assigned object? For example: {$obj->getMemberObj()->foo()} . I tried to {assign} $obj->getMemberObj() first but that didn't work either. A: You can't, at least not in PHP4. This is a limitation of the language. In PHP5 this has been solved. Instead, assign the variable first, and then call the function.
    {assign var='object' value=$obj->getMemberObj()}
    Foo is now: {$object->foo()}
    J'ai testé la chose de mon côté en simulant ton cas de figure :

    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
    32
    33
    34
    35
       //code pour smarty...
     
        $oPere = new Pere('Papa');
        $enfant = new Enfant('Enfant', $oPere);
     
     
        $oSmarty->assign('enfant', $enfant);
     
        $oSmarty->display('index.tpl');
     
        class Pere {
            protected $nom = null;
     
            public function __construct($nom) {
                $this->nom = $nom;
            }
     
            public function getNom() {
                return $this->nom;
            }
        }
     
        class Enfant extends Pere{
            protected $pere = null;
     
            public function __construct($nom, Pere $pere) {
                parent::__construct($nom);
                $this->pere = $pere;
            }
     
            public function getPere() {
                return $this->pere;
            }
     
        }
    Cette syntaxe ne marche pas ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {$enfant->getPere()->getNom()}
    Comme c'est dit dans la Faq on s'en sort avec un assign dans le template :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    {assign var='oPere' value=$enfant->getPere()}
    {$oPere->getNom()}
    Voilà donc dans ton cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    {assign var='pere' value=$enfant->recupererPere()}
    {$pere->getNom()}
    Devrait marcher ...

    ++

  4. #4
    Membre actif Avatar de Tanebisse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 449
    Points : 260
    Points
    260
    Par défaut
    Merci, en effet, c'est ce que j'ai vu et ça fonctionne très bien avec assign.

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

Discussions similaires

  1. Comment accéder aux propriétés d'un objet de la bibliothèque
    Par jpboogie dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 11/02/2009, 10h57
  2. Réponses: 5
    Dernier message: 23/02/2007, 19h55
  3. Réponses: 3
    Dernier message: 02/01/2007, 14h09
  4. Accéder aux propriétés d'un objet créé au runtime
    Par zarbouine dans le forum Delphi
    Réponses: 6
    Dernier message: 14/12/2006, 17h03
  5. Réponses: 6
    Dernier message: 25/09/2006, 17h08

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