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 :

Singleton ne fonctionne pas


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de slack457
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 126
    Points : 98
    Points
    98
    Par défaut Singleton ne fonctionne pas
    Bonjour,

    il semble que j'ai un souci de "Singleton".

    J'essaie d'avoir un système de Singleton sur ma class "App", en utilisant une fonction getInstance().

    Et j'ai placé un "uniqid()" dans le constructeur pour vérifier que le système de Singleton fonctionne (mais ça ne fonctionne pas).

    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
     
    // App\App.php
     
    class App
    {
    	private static $_instance;
     
     
    	public function __construct() // REMOVE ME
    	{
    		$this->unique_id = uniqid(); 
    	}
     
     
    	public static function getInstance()
    	{
    		if (self::$_instance == NULL)
    		{
    			self::$_instance = new App();
    		}
     
    		return self::$_instance;
    	}
    }
    Pour voir j'ai mis un "var_dump()" dans mon header.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // App\Views\inc\header.php
     
    <?php
     
    	$app = App::getInstance();
     
    	var_dump($app);
     
    ?>
    Je vais sur l'accueil pour voir, et le "uniqid()" change tout le temps... (à chaque fois que je clic sur "accueil").

    J'ai fais une recherche de "new App" dans le contenu de tous les fichiers de mon dossier racine (de ce site),
    et je n'ai qu'un seul résultat : celui de la fonction getInstance() de la class App que je vous ai montré.


    PS : J'ai mis en pièces jointes les fichiers et la Base de données si ça peut aider.
    (c'est juste un site de test pour moi pour mieux comprendre l'Objet, MVC, Singleton etc)

    Merci pour votre aide je galère comme pas possible.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    comme ça :
    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
    class App
    {
        private static $_instance;
     
        private function __construct()
        {
            // utilisation de la syntaxe en dehors de la classe : new App() interdite -> Erreur fatale
        }
     
        public static function getInstance()
        {
            if (self::$_instance === NULL)
            {
                self::$_instance = new App();
            }
     
            return self::$_instance;
        }
    }
     
    $a = App::getInstance();
    $b = App::getInstance();
     
    $c = ($a === $b);  // true -> même instance
     
    $d = new App(); // erreur fatale

  3. #3
    Membre régulier Avatar de slack457
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 126
    Points : 98
    Points
    98
    Par défaut
    Salut rawsrc,

    justement je n'ai aucun autre new App() que celui qui est dans la fonction getInstance().

    Par contre effectivement j'utilise des App::getInstance() partout dans mon site. Ce qui ne devrait pas poser de problèmes si j'ai bien compris.

  4. #4
    Membre régulier Avatar de slack457
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 126
    Points : 98
    Points
    98
    Par défaut
    J'ai trouvé.

    Mon erreur c'était de penser que getInstance() me retournerai toujours la même instance, même en rafraichissant la page.
    Mais ce n'est pas le cas.

    J'essayais de garder en mémoire des informations qui ne devaient jamais changer, dans des attributs de ma classe App.

    Je me souviens maintenant que je m'étais dit en début de projet : "tiens je vais tenter de ne pas utiliser de $_SESSION pour voir si on peut se débrouiller en objet sans les $_SESSION".

    Du coup soit ce n'est pas possible de se passer des $_SESSION, soit je m'y prends mal.

    En tous cas tant pis, j'utilise des $_SESSION maintenant.

    Merci quand même rawsrc.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/01/2004, 11h14
  2. [FP]Writeln ne fonctionne pas !
    Par néo333 dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 01/11/2003, 23h47
  3. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04
  4. Un Hint sur un PopupMenu ne fonctionne pas !!??
    Par momox dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2003, 16h48
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

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