Archive

Posts Tagged ‘połączenie z bazą’

Singleton

October 29th, 2008 Marcin Wadowski Comments off

poniżej kodzik dla wzorca projektowego Singleton.
Singleton należy do grupy wzorców konstrukcyjnych.
Generalnie założenie wzorca to możliwość utworzenia jednego i tylko jednego obiektu danej klasy. Najprostrzy i chyba najbardziej popularny przykład wykorzystania tego wzorca to połączenie z tą samą bazą danych w obrębie jednego programu. Wystarczy aby połączyć się z bazą jedynie raz i potem konsekwentnie wykorzystywać to połączenie bez tworzenia nowego co więcej nie musimy pamiętać o tym czy już je nawiązywaliśmy wcześniej w kodzie czy nie, łatwo tu o pomyłkę i zdublowanie a nawet wielokrotne powielenie tej samej operacji. Model singleton skutecznie nas od tego chroni. Poniżej krótki kodzik połączenia z bazą:

class Connection
{
  private static $DbConnect;
  private function __construct() {}

  public static function getConnection()
  {
      if(empty(self::$DbConnect))
      {
          self::$DbConnect = new mysqli(host, user, pass, databasename);
      }
      return self::$DbConnect;
  }
}

wykorzystanie kodu:


$polaczenie = Connection::getConnection();
//zwraca nam obiekt połaczenia z bazą

Ponieważ klasa Connection ma zadeklarowaną $DbConnect jako static i private więc nie będzie się
do niej odwołać z zewnątrz (z poza tej klasy) np. nie będzie można napisać

$dana = Connect::$DbConnect

tak samo nie będzie można utworzyć instancji (obiektu) tej klasy poprzez
$nowainstancja = new Connetion();
przy takim wywołaniu jako pierwsza zostanie wykonana funkcja __construct ale ona z kolei jest zadeklarowana jako private więc nie można się do niej odwołać spoza klasy, próba utworzenia instancji klasy Connection z góry skazana jest na niepowodzenie.

Jak więc ją wykorzystać ?
wywołując na klasie Connection metodę getConnection() zwraca ona zmienną z statyczną self::$DbConnect , która jest połaczeniem z bazą co więcej, metoda getConnection() sprawdza czy połączenie już istnieje czyli czy istnieje (empty(self::$DbConnect)) jeśli tak zwróci resource (resource – połączenie) jeśli nie utworzy nowe połączenie z bazą i zwróci je użytkownikowi.

Categories: php Tags: ,