Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zastosowanie singletona do połączenia z bazą - problem z rozłączeniem
Forum PHP.pl > Forum > PHP > Object-oriented programming
dj.bobas
Witajcie.

Mam następujący problem. Napisałem klasę singleton do połączenia z bazą, której kod poniżej umieszczam...

CODE
class OnlyOneConnection
{

private static $db_instance;

private $dbObject;

private function __construct($database)
{
switch ($database)
{
case 'mysql':
$dbObject = mysql_connect('nazwa_hosta','nazwa_usera','haslo') or die(mysql_error());
mysql_select_db('nazwa_bazy') or die(mysql_error());
if (mysql_errno())
{
echo ("Connect failed: ".mysql_error());
exit();
}
break;

case 'postgre':
$host = DB_HOST;
$data_base = DB_DATABASE;
$user = DB_USER;
$pass = DB_PASSWORD;
$conn_string = "host=$host dbname=$data_base user=$user password=$pass";
$dbObject = @pg_connect($conn_string);
if(!$dbObject)
{
echo ("Nie można połączyć się z bazą danych...");
}
break;
}
}

public function var_dumping()
{
var_dump($this);
}

public static function getInstance($database)
{
if (self::$db_instance === null)
{
self::$db_instance = new OnlyOneConnection($database);
}
return self::$db_instance;
}

public static function getConnection()
{
if (self::$db_instance!=null)
{
return $this->dbObject;
}
}

public static function disconn($database)
{
if($database=='mysql') {
mysql_close($dbObject);
}
else if ($database=='postgre') {
pg_close($connection);
}
}

}


No i problem jest następujący: działa połączenie z bazą (czyli konstruktor oraz metoda getInstance) natomiast nie wiem jak napisać metodę rozłączania z bazą poprzez zamknięcie uchwytu. Próbowałem z metodą getConnection, która miała zwracać uchwyt, ale coś pokręciłem i nie działa metoda disconn.
Nie mam pojęcia jak to rozwiązać.... sadsmiley02.gif

Z góry dziękuję za wszelkie sugestie....
dr_bonzo
Do pol obiektu odwoluje sie przez:

$this->dbObject;
a nie $dbObject (to zmienna lokalna, lub parametr metody)
dj.bobas
Niestety po wprowadzeniu tej zmiany i zastosowaniu w testowym pliku zapisu
Kod
OnlyOneConnection::disconn('mysql');

pojawia się w błąd:
Kod
<b>Warning</b>:  mysql_close(): supplied argument is not a valid MySQL-Link resource in <b>/home/lukusm/public_html/fach/model.php</b> on line <b>84</b>
     klient klient d
dr_bonzo
Nie widze poprawionego kodu...
dj.bobas
Problem rozwiązany:



Kod
public static function disconn($database) <BR>{<BR>if($database=='mysql') {<BR>mysql_close($this->dbObject);</P><P>self::$db_instance=null;<BR>}<BR>else if ($database=='postgre') {<BR>pg_close($connection);<BR>}<BR>}<BR>




i nastepnie w kodzie testujacym :

Kod
OnlyOneConnection::getInstance('mysql')->disconn('mysql);




i gra gitara....  guitar.gif guitar.gif

Dzięki za wskazówki
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.