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:
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:
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.