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