[php5] Singleton Zobacz pojedynczy post
W tej chwili mamy klasę obsługującą bazę danych, którą możemy rozwijać o nowe funkcje. Jednakże tworzenie obiektu jest trochę uciążliwe - oto jak możemy je ułatwić.
Singleton - pozwala na stworzenie instancji do obiektu, a tym samym używanie go w każdym miejscu na stronie.
plik: _handler.php
PHP: |
<?php
DEFINE('DBPATH','./'); // ścieżka do plików
$php_ext='php'; // rozszerzenie skryptów
require_once(DBPATH."class.db.interface".$php_ext); // interfejs bazy danych
require_once(DBPATH."class.db.basic.".$php_ext); // podstawowa funkcja
if(file_exists(DBPATH."class.db.".$db_type.$php_ext)) // jeśli istnieje plik z obsługą bazy danych
require_once(DBPATH."class.db.".$db_type.$php_ext); // wczytuhemy go
else //w przeciwnym wypadku pokazujemy błąd
die("Could not obtain DB object.");
class DBHandler
{
private static $db_object=null; // dzięki temu nie musimy tworzyć nowego obiektu za każdym razem, gdy chcemy go użyć
public static function _create($config, $type = "")
{
if(!is_array($config)) return null; //konfiguracja bazy danych musi być tablicą
if(is_null(self::$db_object)) // jeśli obiekt zawierający instancję jest pusty
{
/* oraz istnieje klasa obsugująca bazę danych, możemy utworzyć instancję */
if(class_exists($type, false)) self::$db_object = new $type;
/* jeśli operacja się powiodła, możemy klasę skonfigurować*/
if(!is_null(self::$db_object)) self::$db_object -> db_configure($config);
}
// jeśli instancja istnieje, po prostu ją zwracamy.
return self::$db_object;
}
}
?>
|
Teraz wystarczy, że gdziekolwiek w kodzie wywołamy:
PHP: |
<?php
$db_config=array( 'server'=>'localhost',
'user'=>'root',
'pass'=>'',
'db'=>'baza11e',
'persistent_conn' => 'false');
$db_type='mysql'; //rodzaj bazy danych
$db = DBHandler::_create($db_config, $db_type); // tworzy obiekt
unset($db_config); // kasuje konfigurację
if(!is_object($db)) // jeśli obsługa bazy danych nie została zainicjowana, zwracamy błąd
{
die("BŁĄD: NIE MOŻNA UTWORZYĆ OBSŁUGI BAZY DANYCH.");
}
$db->db_connect(); // łączymy się z bazą danych
if($db->message != "") // jeśli wystąpił błąd - zwracamy go
{
die($db->message);
}
?>
|
|