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] Héritage, interface et composition


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de remyli
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 270
    Points : 151
    Points
    151
    Par défaut [POO] Héritage, interface et composition
    Bonjour à tous,

    Je me tourne vers vous pour comprendre pourquoi mon code ne marche pas ...

    Dans ce code je crée une instance d'un objet qui hérite de MP_Moteur
    dans une instance de MP_Moteur...

    J'ai commenté à la ligne 41 le fait que MoteurCToutVert hérite de MP_Moteur est là ça marche..
    Si je remet cet héritage (ou que je decommente la creation d'un MoteurCPasRouge) alors je me mange une page blanche alors que mon serveur de développement est configuré pour afficher les erreurs...


    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    <?php
     
    interface MoteurInterface
    {
        public function execute();
    }
     
    /**
     * Super Moteur (Les autres moteur hérite de lui) ET moteur de moteur (sa fonction execute() execute celles de ses fils.)
     */
    class MP_Moteur implements  MoteurInterface
    {
        protected $moteurs;
     
        public function __construct()
        {
            $this->moteurs = array();
            $mCPR = new MoteurCPasRouge();
            $mCTV = new MoteurCToutVert();
     
            echo ' yop ';
        }
     
        /**
         * Moteur de moteur
         * @return <type>
         */
        public function execute()
        {
            $result = array();
            #Les moteurs
            foreach($this->moteurs as $m)
            {;
                $r = $m->execute();
                $result = array_merge($result, $r);
            }
            return $result;
        }
    }
     
    class MoteurCToutVert // extends MP_Moteur
    {
        public function execute()
        {
            $result = array();
            //...
            return $result;
        }
    }
     
    class MoteurCPasRouge extends MP_Moteur
    {
        public function execute()
        {
            $result = array();
            //...
            return $result;
        }
    }
     
     
    $m = new MP_Moteur()
     
    ?>

    Merci par avance pour votre aide
    Orthographe => Message Privé constructif svp

  2. #2
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 44
    Points : 51
    Points
    51
    Par défaut
    salut

    je pense que tu as un problème avec le concept POO

    La CLASS MERE => MP_Moteur
    Les CLASS FILLE => MoteurCToutVert, MoteurCPasRouge

    Instancie une CLASS FILLE pour travaillé avec les méthodes et/ou propriete public de la CLASS MERE.
    les propriétés private et protected ne sont pas accessible depuis la CLASS FILLE, il faut crée un getter et un setter.

    tu peux surchargé le constructeur de la CLASS FILLE avec celui de la CLASS MERE.
    Ta méthode execute() en CLASS MERE tu peux la surchargé dans ta CLASS FILLE.

    j'espère t'avoir aidé

  3. #3
    Membre habitué Avatar de remyli
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 270
    Points : 151
    Points
    151
    Par défaut
    Citation Envoyé par backdown Voir le message
    La CLASS MERE => MP_Moteur
    Les CLASS FILLE => MoteurCToutVert, MoteurCPasRouge

    Instancie une CLASS FILLE pour travaillé avec les méthodes et/ou propriete public de la CLASS MERE.
    les propriétés private et protected ne sont pas accessible depuis la CLASS FILLE, il faut crée un getter et un setter.

    tu peux surchargé le constructeur de la CLASS FILLE avec celui de la CLASS MERE.
    Ta méthode execute() en CLASS MERE tu peux la surchargé dans ta CLASS FILLE.
    Pour le moment je suis complètement d'accord avec toi...
    J'ai mit les attributs de ma CLASS MERE en public pour pouvoir les utiliser dans mes classes filles. (ça j'avais pas fait attention)

    Mais ce qui me dérange le plus c'est pourquoi il me renvoie une page blanche ?!

    Au passage le code que j'ai présenté est un exemple. Dans mon code complet l'interface spécifie plus de méthodes, ma CLASS MERE définie des méthodes qui sont utilisée dans les CLASS FILLE. La methode execute() est certes définie dans la CLASS MERE mais elle est surchargé dans les CLASS FILLE.
    Orthographe => Message Privé constructif svp

  4. #4
    Membre habitué Avatar de remyli
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 270
    Points : 151
    Points
    151
    Par défaut
    J'ai résolut mon problème en remanient un peu mon code.

    J'ai donc plusieurs moteurs qui doivent répondre à un contrat : MoteurInterface.

    La plupart de mes moteurs on un fonctionnement similaire (Une sorte de catégorie de moteurs). Je crée donc une classe abstraite MP_MoteurAbstract qui définie des comportements similaires.

    Enfin mes moteurs héritent de MP_MoteurAbstract et selon le contrat définissent execute().


    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    <?php
    /**
     * Moteur de réservation en ligne
     */
     
    /**
     * Interface des moteurs (Le contrat)
     */
    interface MoteurInterface
    {
        public function execute();
        public function setCriteres($criteres);
    }
     
    /**
     * Implément des fonctions utiles (boite à outil) pour tous les moteurs 'standard'
     */
    abstract class MP_MoteurAbstract implements  MoteurInterface
    {
        public $criteres;
     
        public function __construct()
        {
            $this->criteres = array();
        }
     
        public function addCritere($key, $valeur=null, $type=null)
        {
            $this->criteres["$key$type"] = $valeur;
        }
     
        public function setCriteres($criteres)
        {
            $this->criteres = $criteres;
        }
     
        public function getCritere($key, $type=null)
        {
            return $this->criteres["$key$type"];
        }
    }
     
    /**
     * moteur de moteur
     */
    class MP_Moteur extends MP_MoteurAbstract
    {
        /**
         * Liste des moteurs
         * @var <type>
         */
        public $moteurs;
     
     
        public function __construct()
        {
            parent::__construct();
            $this->moteurs = array();
            $this->moteurs['CToutVert'] = new MoteurCToutVert();
            $this->moteurs['MaPlage'] = new MoteurMaPlage;
            //$this->moteurs['CPasRouge'] = new MoteurCPasRouge;
        }
     
        /**
         * Moteur de moteur
         * @return <type>
         */
        public function execute()
        {
            $result = array();
            #Les moteurs
            foreach($this->moteurs as $m)
            {
                $m->setCriteres($this->criteres);
                $r = $m->execute();
                $result = array_merge($result, $r);
            }
            $result[] = array('nom'=>'momo','url'=>'momo');
            $result = array('moteurs'=>$result,'params'=>$this->criteres);
            return $result;
        }
     
     
    }
     
    /**
     * Moteur CToutVert
     */
    class MoteurCToutVert extends MP_MoteurAbstract
    {
        public function execute()
        {
            $result = array();
            //..
            return $result;
        }
    }
     
    /**
     *
     */
    class MoteurCPasRouge extends MP_MoteurAbstract
    {
        public function execute()
        {
            $result = array();
            //..
            return $result;
        }
    }
    ?>
    Orthographe => Message Privé constructif svp

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

Discussions similaires

  1. [POO] héritage et interface
    Par stailer dans le forum Langage
    Réponses: 1
    Dernier message: 17/04/2007, 13h14
  2. [POO] Poo : héritage & constructeur
    Par Invité dans le forum Langage
    Réponses: 3
    Dernier message: 11/07/2006, 14h29
  3. [POO]héritage du constructeur de la classe parente
    Par new_wave dans le forum Langage
    Réponses: 7
    Dernier message: 10/03/2006, 14h25
  4. [POO-Héritage] Appel du constructeur en PHP4.3.2
    Par raoulchatigre dans le forum Langage
    Réponses: 4
    Dernier message: 28/11/2005, 15h37
  5. [Language][POO]classe interface
    Par Samanta dans le forum Langage
    Réponses: 9
    Dernier message: 21/06/2005, 15h32

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