Witam.
Zastanawiam się nad zastosowaniem wzorca Singleton do obsługi bazy danych, Zacząłem nawet implementować, ale po drodze pojawiły się wątpliwości co do sensu zastosowania go. Mianowicie moje wątpliwości wzięły się z tego, ze mimo zastosowania tego rozwiązania które z założenia miał nie pozwalać na otwieranie kolejnych połączeń z bazą, w kolejnych plikach php w których potrzebowałem połączenia z db musiałem tworzyć nowe obiekty a nie mogłem skorzystać z utworzonego wcześniej (albo przynajmniej tak mi się wydaje, dlatego piszę bo może ktoś mnie wyprowadzi z błędu).
W każdym razie mój kod wygląda następująco:
singleton.php
<?php
class Singleton {
static $instancja = false;
private $nazwa;
private $pass;
private $login;
private $serwer;
private function __construct() {
;
}
private function __clone() {
;
}
static function instancja(){
if(empty(self::$instancja)) self::$instancja=new Singleton ();
return self::$instancja;
}
public function dbConnect($s,$p,$u,$n){
$this->setPass($p);
$this->getPass();
$this->setServer($s);
$this->setUser($u);
$this->setName($n);
@mysql_connect($this->serwer,$this->user,$this->pass) or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error());
echo "Udało się połączyć z serwerem!<br />";
@mysql_select_db($this->nazwa) or die('Brak połączenia z bazą danych.<br />Błąd: '.mysql_error());
echo "Udało się połączyć z bazą dancych!";
}
public function setPass($p){
$this->pass=$p;
}
public function setServer($s){
$this->serwer=$s;
}
public function getServer(){
return $pass;
}
public function setUser($u){
$this->user=$u;
}
public function setName($n){
$this->nazwa=$n;
}
public function getName(){
return $nazwa;
}
}
?>
plik1.php
include "singleton.php";
$instance=Singleton::instancja();
$instance->dbConnect("localhost","haslo","user","nazwa");
$tmp=mysql_query("SELECT NAZWISKO FROM KIEROWCY WHERE ID_KIEROWCY='1'");
$temp=mysql_fetch_row($tmp);
echo $temp[0];
plik2.php
include "singleton.php";
$instance2=Singleton::instancja();
$instance2->dbConnect("localhost","haslo","user","nazwa");
I teraz czy to ma sens (działa w każdym razie) ale czy spełnia założenia singletona? Bo ja tego nie widzę, jak dla mnie to i tak po przeładowaniu z plik1.php do plik2.php najpierw zamykane jest jedno połączenie a naste pnie otwierane w kolejnym pliku drugie a to mogę osiągnąć nie korzystając z singletona. Proszę o sugestie czy mam zły tok myślenia czy w kodzie coś jest nie tak.