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 :

Plusieurs instance d'une class -> même objet retourné


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    janvier 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : janvier 2005
    Messages : 152
    Points : 80
    Points
    80
    Par défaut Plusieurs instance d'une class -> même objet retourné
    Bonjour à tous,

    Désolé pour le titre, je ne trouvais pas de titre qui collait à ma question...

    Le problème est le suivant :

    Dans mon code, j'instancie souvent les mêmes class au court de la même transaction. A chaque fois je fais un $obj1= new class1();

    La plus part du temps mes class ne possèdent pas de variable et le constructeur est vide. J'aimerais faire en sorte que lors du premier instance de la class, je place l'objet instantié dans $GLOBALS et ensuite lors de la seconde instance, je retourne le premier. Mais je ne sais pas trop ou faire cela surtout que je n'ai pas envie de modifier le code qui instancie la class. Ca doit être transparant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $obj1= new class1();
     
    $obj2= new class1();
     
    Ca doit revenir à faire
     
    $obj1=$obj2= new class1();
    $obj1 et $obj2 doivent être les mêmes objets. Même adresse mémoire si possible.

    J'ai essayé dans le constructeur mais le return dans un constructeur ne fonctionne pas. Comment surcharger à la demande le new class1();


    D'un autre point de vue, comment faire en sorte que lorsque je fais $obj1= new class1(); il mette dans $obj1 ce que je veux. Un string, un int ou un objet déja instancié.

    PS: j'utilise _autoload pour y mettre le require_once du fichiers php qui contient la class demandée si cette class n'est pas définie. C'est peut être une piste à explorer.

    PS2: c'est un super singleton

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    janvier 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : janvier 2005
    Messages : 152
    Points : 80
    Points
    80
    Par défaut
    bon apparemment c'est bien le singleton qui répond à mon problème comme expliqué ici : http://classes.scriptsphp.org/articl...gleton-en-PHP5

    Mais tout mon code utilise des $obj1= new class1(); et voici ce que propose l'article

    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
    <?php
    Class Single {
       static $instance;
       private function __construct() {
        ...
       }
       static function GetInstance() {
            if (empty(self::$MyInstance)) {
             self::$MyInstance = new Single;  
           }
          return self::$MyInstance;
       }
     
    }
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
       $MonObjet = Single::GetInstance();
       $MonObjet-> MaMethode();
    ?>
    Bref comment transformer $obj1= new class1(); en $obj1=class1::GetInstance(); ?

  3. #3
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : juin 2009
    Messages : 646
    Points : 842
    Points
    842
    Par défaut
    Citation Envoyé par vodnok Voir le message
    Bref comment transformer $obj1= new class1(); en $obj1=class1::GetInstance(); ?
    Tu changes "new class1()" par "class1::GetInstance()"

    Tu n'as pas le choix. Si dans ton code tu as plusieurs fois "new class1()", alors tu auras forcément plusieurs objets différents. La vie est cruelle, tu n'as d'autres choix que de refactorer ton code

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    janvier 2005
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : janvier 2005
    Messages : 152
    Points : 80
    Points
    80
    Par défaut
    Ok, je vais essayer de faire une stat de nombre d'instance pour voir les class les plus instanciées dans une même transaction. Car je me vois mal tout changer.


    Mais pourquoi j'ai pas penser au singleton directement

Discussions similaires

  1. [PHP 5.0] creer plusieurs instances d'une classe dans une boucle
    Par supersonicblonde dans le forum Langage
    Réponses: 6
    Dernier message: 12/04/2011, 10h06
  2. Comment créer plusieur instance d'une class
    Par zyaya dans le forum C++Builder
    Réponses: 5
    Dernier message: 23/12/2010, 15h01
  3. Plusieurs instances d'une même BDD
    Par remax_ren dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 05/02/2008, 10h53
  4. Réponses: 2
    Dernier message: 26/10/2006, 11h13
  5. Réponses: 6
    Dernier message: 06/12/2004, 23h18

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