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

PhpMyObject Discussion :

Singleton : intérêt et méthode


Sujet :

PhpMyObject

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Points : 18
    Points
    18
    Par défaut Singleton : intérêt et méthode
    Bonjour, je suis entrain de voir l'intérêt de l'utilisation d'un singleton mais j'ai une erreur et je voudrais être sûr de comprendre.
    En gros je faire une connexion au serveur :

    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
    <?PHP
    class MysqlConnection	{
    	private static $instance;
    	public $teste;
    	private function __construct()	{
    		
    	self::$instance = mysql_connect(SERVEUR, LOGIN, PASS) OR DIE (header("Location: ".ABS."/erreur.php?erreur=connexion base"));
    		mysql_select_db(BASE, self::$instance)OR DIE (header("Location: ".ABS."/erreur.php?erreur=base"));
    		mysql_query("SET NAMES 'utf8'");
    	}
    
    	public static function GetInstance()	{
    		if(!isset(self::$instance))	new MysqlConnection();
    		return self::$instance;
    	}
    	public function close(){
    	$this->fermer_connexion=mysql_close(self::$instance)OR DIE ("erreur");
    
    	}	
    	public function test(){
    			$this->teste= "<h1>voilàjitoret</h1>";
    			
    			
    
    	}	
    }
    Je met le code suivant pour appeler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $config=MysqlConnection::GetInstance();
     echo "<table width='300'height='200'border='1'style='margin-top:100px;background-color:white;'><tr><td>là : ";
     echo $config->test();
     echo "</td></tr></table>";
     echo $config->fermer_connexion;
    J'obtiens ce message :

    Fatal error: Call to a member function test() on a non-object in

    En gros dans ma classe de connexion sql j'utilise simplement : MysqlConnection::GetInstance(); dans le constructeur.


    Donc ce que j'aimerai savoir c'est :
    -quel est l'erreur ?
    -comment peut-on appeler une fonction comme la fonction test ou l'objet teste ?
    -est ce que je l'utilise dans le bon but. Normalement si ce script fonctionne et que je me sert de cette connexion pour faire mes requête cela me permettra d'établir qu'une connexion et donc ça allègera les temps de chargement.
    -est ce que on doit /ou peut faire un mysql_close ? si oui pourquoi ?

    Parceque ce que je souhaite faire, c'est une connexion unique lors de l'affichage de la page du style : connexion serveur, requete sql,affichage et fermeture connexion.

    J'ai regardé pas mal de tuto mais j'ai encore un peu de mal donc merci pour votre aide.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 31
    Points : 18
    Points
    18
    Par défaut suite...
    Re,

    donc après quelques modification, j'arrive à ç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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    class MysqlConnection {
        /**
         * Propriété privée stockant une instance de la classe si MysqlConnection::getInstance() est appelé
         * @var MysqlConnection
         */
        private static $_instance;
        /**
         * Constructeur privé puisqu'on ne veut pas pouvoir instancier MysqlConnection de cette manière. Il faut passer par MysqlConnection::getInstance()
         */
        private function __construct () {
            //echo 'je suis une instance de MysqlConnection';
    		self::$instance = mysql_connect(SERVEUR, LOGIN, PASS) OR DIE (header("Location: ".ABS."/erreur.php?erreur=connexion base"));
    		mysql_select_db(BASE, self::$instance)OR DIE (header("Location: ".ABS."/erreur.php?erreur=base"));
    		mysql_query("SET NAMES 'utf8'");
    
    	}
      /**
         * Méthode implémentant le design pattern MysqlConnectionton
         * @return MysqlConnection
         */
        public static function getInstance () {
            if (!isset (self::$_instance)) {
                self::$_instance = new MysqlConnection();
            }
            return self::$_instance;
        }
      /**
         * Méthode publique quelconque 
         */
        public function doSomething () {
            echo 'I am doing something!';
        }
      /**
         * Si l'on ne veut pas pouvoir instancier MysqlConnection de façon normale, on ne doit pas non plus pouvoir le cloner.
         */
        public function __clone () {
            throw new Exception ('Le clonage de MysqlConnection n\'est pas autorisé');
        }
    	public function test(){
    			echo "<h1>voilàjitoret</h1>";
    	}
    }
    //$o = new MysqlConnection (); // va échouer car le constructeur est privé
    $o = MysqlConnection::getInstance ();
    $o ->doSomething ();
    //$o2 = clone ($o); // va lancer une exception grâce à 	::__clone()
    Et j'obtiens ce message : Fatal error: Access to undeclared static property: MysqlConnection::$instance in ....... on line 13.

    Là je ne comprend vraiment pas....

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 181
    Points : 162
    Points
    162
    Par défaut
    pas le bon forum
    PhpMyObject teck leader
    http://pmo.developpez.com

    La justice de l'intelligence est la sagesse. Le sage n'est pas celui qui sait beaucoup de choses, mais celui qui voit leur juste mesure.

Discussions similaires

  1. [Singleton] Toutes les méthodes doivent-elles être 'synchronized'
    Par philippe13 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 24/10/2014, 17h48
  2. [PHP 5.2] [POO] Factorisation des méthodes d'un singleton
    Par mistertbo dans le forum Langage
    Réponses: 10
    Dernier message: 10/11/2009, 11h43
  3. Méthode statique: le singleton
    Par Henry22 dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 21/04/2009, 17h00
  4. Réponses: 6
    Dernier message: 05/03/2008, 20h53
  5. Pattern singleton ou Classe avec méthodes statiques ?
    Par Claythest dans le forum Langage
    Réponses: 3
    Dernier message: 11/12/2006, 11h28

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