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ériter d'une classe singleton


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 199
    Points : 116
    Points
    116
    Par défaut [POO] Hériter d'une classe singleton
    Salut à tous,

    Dans le cadre d'un projet je dois créer plusieurs classes de type Singleton et par soucis de clarté je pensais créer une classe Singleton dont les autres hériteraient à la manière de ce qui se fait en C++ mais pour le moment j'ai un soucis.

    Je m'explique. Voici en gros mon code :

    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
     
    class Singleton
    {
      private static $_instance = null;
     
      public static function getInstance()
      {
        if (is_null(self::$_instance))
        {
          self::$_instance = new self();
        }
        return self::$_instance;
      }
     
      private function __construct(){ echo 'toto'; }
    }
     
    class classeTypeSingleton extends Singleton
    {
      private function __construct(){ echo 'titi'; }
    }
     
     
    // Je récupère ainsi l'instance de la classe fille
    $instance = classeTypeSingleton::getInstance();
    Le problème est que le constructeur de la classe fille n'est jamais appelé mais c'est celui de la classe Singleton qui l'est (concrètement il affiche toujours 'toto'). Mon but est comme vous l'avez vu de montrer que la classe fille est de type Singleton par l'héritage et le constructeur privé mais sans encombrer plus le code.
    Ai-je fait une monstrueuse boulette ou est-ce juste impossible de fait ça?

    Edit : Je viens de me rappeler qu'en C++ j'utilisais les templates pour parvenir au résultat voulu. Donc ma question deviens "est-ce que l'idée même que la classe mère Singleton à hériter est faisable en php ?"
    merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    En faite ton objet est créé par un appel static dans la Class Singleton, tu utilises le mot clé self:: qui fait reference la class courante pas la class enfant.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 199
    Points : 116
    Points
    116
    Par défaut
    Existe t'il un moyen pour que la fonction "getInstance" qui appartient à la classe mère mais est appelée par la classe fille, construise un objet de la classe appelante et non de la classe mère?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    199
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 199
    Points : 116
    Points
    116
    Par défaut
    J'ai trouvé la solution dans le livre "Best practices PHP5" de Guillaume Ponçon. La solution nécessite de conserver une fonction getInstance dans la classe fille qui appelle la fonction du même nom de la classe mère en lui spécifiant son nom (pour que la classe mère sache quel objet construire). Ca correspond à 80% à ce que je souhaitais et je pense que c'est le mieux qu'on puisse faire en php5.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/03/2008, 10h58
  2. Réponses: 19
    Dernier message: 02/02/2006, 23h30
  3. Réponses: 14
    Dernier message: 02/02/2006, 18h32
  4. Réponses: 3
    Dernier message: 02/12/2005, 15h58
  5. Réponses: 7
    Dernier message: 25/03/2005, 14h05

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