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] Objet se renvoyant lui-même en php5


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre extrêmement actif
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 144
    Billets dans le blog
    3
    Par défaut [POO] Objet se renvoyant lui-même en php5
    Hello,

    je suis vraiment désolé pour le titre mais je ne vois pas comment nommer mon problème.. ou alors "Objet récursif", mais c'est pas vraiment ça.

    Donc je vous explique :
    J'ai une classe : "Peche", qui va par exemple me permettre, via les iterator de rajouter dynamiquement des "poissons" (je répète bien que c'est un exemple lol) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->getPeche()->addPoisson('truite', 25);
    et à chaque fois que je veux ajouter un poisson, je dois utiliser cette ligne de code... Alors quand c'est dans une boucle pas de souci.. Mais si c'est en dur, c'est vraiment dommage de répéter autant de texte ! alors que je pourrais avoir quelque chose de plus élégant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $this->getPeche()
       ->addPoisson('truite', 25)
       ->addPoisson('Saumon', 10)
       ->addPoisson('baleine', 30);
    Quelqu'un a t il déjà implémenter cette technique de façon optimisée ? et pourrait-il me montrer un exemple ?

    Merci d'avance pour vos réponses,

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 683
    Par défaut
    pour l'ajout en chaine, j'ai souvent vu ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $this->getPeche()->ajoutListePoisson(array(
        new Truite(25),
        new Saumon(10),
        new Baleine(30),
    ));
    et là tu as une "Fatal error: Argument must be an list of Poisson" parce que Baleine n'hérite pas de Poisson (oui je sais que c'est un exemple )

  3. #3
    Membre extrêmement actif
    Avatar de stailer
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2003
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 144
    Billets dans le blog
    3
    Par défaut
    Non j'aimerais vraiment pas passer par un tableau intermédiaire...

    La solution que j'ai donc mis en place à l'heure actuelle est évidemment de retourner l'objet lui même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public function addPoisson($type='', $nombre = 0) {
      ... code ajout ...
      return $this;
    }
    Bien sur ça marche... Mais n'y a t il pas mieux et plus optimisé que de retourner l'objet lui-même ?
    Un design pattern n'existerait-il pas par exemple ?

    (je sais qu'on ne peut pas ajouter baleine à poisson.. Mais c'était pour voir si tout le monde suivait héhé )

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Par défaut
    Citation Envoyé par stailer Voir le message
    Mais n'y a t il pas mieux et plus optimisé que de retourner l'objet lui-même ?
    Tu as un problème de performances ?
    (à cause de l'ajout de la baleine qui prend beaucoup en mémoire ? )



    Sérieusement, avant de chercher à optimiser un code, cherche d'abord à savoir si il constitue effectivement un goulot d'étranglement ... et dans ton cas à mon avis la réponse est non ...

    De mémoire, il me semble d'ailleurs que le ZendFramework utilise la même technique pour les View ($view->assign('var1', $var1)->assign('var2', $var2)->render() par exemple).
    Au passage je ne vois pas de récursivité là dedans, aucune fonction ne s'appelle elle-même

  5. #5
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Par défaut
    L'exemple avec le Zend Framwork aurait plutot été :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Zend_Loader::loadClass('Zend_Controller_Front');
    $front = Zend_Controller_Front::getInstance()
    	->addModuleDirectory('../application/modules')
    	->throwExceptions(true)
    	->dispatch();
    J'aimerais bien savoir aussi comment faire ca.

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Par défaut
    Autant pour moi pour l'exemple mal choisi

    J'aimerais bien savoir aussi comment faire ca.
    Zend Framework est open-source, tu n'as qu'a regarder la source de Zend_Controller_Front :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public function throwExceptions($flag = null)
        {
            if (true === $flag) {
                $this->_throwExceptions = true;
                return $this;
            } elseif (false === $flag) {
                $this->_throwExceptions = false;
                return $this;
            }
     
            return $this->_throwExceptions;
        }
    Il suffit de retourner $this

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

Discussions similaires

  1. Objet tournant sur lui-même
    Par ayla33 dans le forum Flash
    Réponses: 1
    Dernier message: 01/05/2012, 18h22
  2. créer un objet à partir de lui-même
    Par bomehc dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 17/04/2011, 15h26
  3. [POO] Un objet peut-il se détruire lui-même
    Par raoulchatigre dans le forum Langage
    Réponses: 2
    Dernier message: 23/10/2007, 16h58
  4. Rotation d'un objet sur lui-même
    Par Ninouw dans le forum OpenGL
    Réponses: 6
    Dernier message: 29/12/2006, 09h40
  5. [POO] Objet classe PHP5
    Par theskel dans le forum Langage
    Réponses: 1
    Dernier message: 08/08/2006, 10h49

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