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] Instancier une classe fille appelante depuis la classe mère


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 183
    Par défaut [POO] Instancier une classe fille appelante depuis la classe mère
    Bonjour à tous ^^

    Je suis en php 5.2.8

    J'ai plusieurs classe filles dont jaimerais pouvoir créer une instance depuis la classe mère.

    Sachant que je ne veux pas avoir à retoucher la classe mère à chaque fois que je crée une nouvelle classe fille. Le but étant de faire quelque chose de générique que je n'aurais pas à modifier.

    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
     
    class GenericTable {
     
        public function __construct() {
     
        }
     
        public static function test() {
     
            // instancier la classe TableA si appelé depuis TableA::test()
            // instancier la classe TableB si appelé depuis TableB::test()
            // ...
     
            return $instance;
        }
    }
     
    class TableA extends GenericTable {
     
        public function __construct() {
     
     
        }
    }
     
    class TableB extends GenericTable {
     
        public function __construct() {
     
     
        }
    }
     
    $objTableA = TableA::test();
    $objTableB = TableB::test();

    Si le problème manque de clarté faites moi signe, étant dedans je n'ai peut-être pas le recul nécessaire.

    Un grand merci d'avance.

  2. #2
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    si le code est un "fabricant" d'objet alors ce code sera plutôt en dehors de la classe "GenericTable"
    et donc tu auras ce genre de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Fabricanttable
    {
        static public generation($typeTable)
        {
            $nomClasse = "Table$typeTable";
     
            return new $nomClasse();
        }
    }
     
    $objetTableB = Fabricanttable::generation('B');

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 183
    Par défaut
    J'aimerais tant qu'à faire éviter d'envoyer le nom de la classe en paramètre de la méthode statique

  4. #4
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Citation Envoyé par loacast Voir le message
    J'ai plusieurs classe filles dont jaimerais pouvoir créer une instance depuis la classe mère.
    Quel est l'intéret ?

    Citation Envoyé par loacast Voir le message
    J'aimerais tant qu'à faire éviter d'envoyer le nom de la classe en paramètre de la méthode statique
    Cela me semble difficile sans lui envoyer en paramètre le nom de la classe fille, même impossible. Comment veux tu qu'il instancie la bonne classe sinon ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 183
    Par défaut
    Quel est l'intéret ?
    En un mot : Généricité

    Cela me semble difficile sans lui envoyer en paramètre le nom de la classe fille, même impossible. Comment veux tu qu'il instancie la bonne classe sinon ?
    C'est la question que je pose ^^

  6. #6
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Cela ne va pas rendre générique ta classe, mais spécifique au contraire.

    Si tu inclu de la logique métier de tes classes filles dans ta classe mère, c'est que tu as un souci de conception.

    Ta classe mère doit posséder une méthode de génération "sommaire", ensuite, si chaque classe fille doit faire des traitements de génération plus spécifiques, il faut surcharger (sans oublier d'appeler la méthode mère parent::generation()).

Discussions similaires

  1. Réponses: 8
    Dernier message: 25/09/2013, 22h38
  2. Réponses: 6
    Dernier message: 09/02/2011, 15h39
  3. [Doxygen]Commenter une fonction héritée depuis la classe fille
    Par khazna dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 31/01/2009, 15h20
  4. Réponses: 1
    Dernier message: 02/05/2008, 21h34
  5. Réponses: 3
    Dernier message: 27/04/2007, 15h51

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