Singleton encore

Résolu
cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011 - 18 août 2009 à 00:31
nautilus99 Messages postés 661 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 18 septembre 2009 - 18 août 2009 à 11:41
Bonjour,

je ne comprends pas pourquoi j'ai une erreur. J'essaie d'utiliser le singleton mais je n'arrive pas à appeler une fonction à l'intérieur.
Voici le code :
class Session{
private static $instance;
private function __construct() {

}
   /***************************************************/
   /*                  <SINGLETON>                    				      */
   /***************************************************/	
public static function getInstance() {
if(!isset(self::$instance) || self::$instance == null) {
new Session();
}
return self::$instance; 
}


...


PUBLIC function controleAcces(){
//ON REGARDE SI LA SESSION A EXPIRÉ PAR RAPPORT À L'ID DE SESSION, L'IP ET LE BROWSER
$this->sessionValide(SID,IP,BROWSER);
$this->searchSession(SID,IP,BROWSER);
//ON DECONNECT EN FONCTION DE L'ID DE SESSION
IF (ISSET($_GET['deco'])){
$this->deconnexionUtilisateur(SID);
}		
}
}


Je fais appel à cette classe comme ça :
REQUIRE_ONCE (INC_CLASS_COMM.'session_class.php'); 
$session_actuelle = Session::getInstance();
$session_actuelle->controleAcces();


Mais j'obtiens le message suivant :
Fatal error: Call to a member function controleAcces() on a non-object in /../index.php on line 32

Sachant qu'avant script fonctionnait car là j'ai juste rajouter le singleton et changer mon appel.

Merci d'avance à toute personne qui peut m'aider.

3 réponses

nautilus99 Messages postés 661 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 18 septembre 2009 1
18 août 2009 à 10:50
Bonjour, il y a simplement une erreur dans ta méthode statique getInstance:

public static function getInstance() {
    if(!isset(self::$instance) || self::$instance == null) {
        self::$instance = new Session();
    }
    return self::$instance; 
}


Si tu n'affectes pas self::$instance à la création de la session, il est normal que null soit un non-objet ensuite.
3
cs_eltyty Messages postés 86 Date d'inscription mercredi 31 janvier 2007 Statut Membre Dernière intervention 22 novembre 2011
18 août 2009 à 11:37
Vraiment merci super. Je suis toujours étonné de voir pour vous la simplicité de ces choses.
Bon il est vrai que ce n'est pas mon métier mais pourtant je boss en parallèle assez régulièrement.
En tout cas merci.

Juste pour savoir au niveau de la logique. Je compte utiliser le singleton avec ma class de session. Cette classe vérifie à chaque ouverture de page si l'utilisateur est connecté ou pas. Dans le cas où il est connecté, j'initialise des variable.
Vous semble-t-il judicieux d'utiliser le singleton dans ce cas ??

Merci
0
nautilus99 Messages postés 661 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 18 septembre 2009 1
18 août 2009 à 11:41
Si la réponse a corrigé le problème, valides la réponse :)

Pour l'usage du singleton, personnellement je l'utilise systématiquement quand je veux forcer l'usage d'une seule et unique instance d'un objet tout au long d'un script.

Mais comme pour tout design pattern, les discussions entre les pour et les contres peut s'éterniser, sans jamais départager.
0
Rejoignez-nous