Wzorzec singleton-a przez wiele osób uważany jest jako antywzorzec ponieważ bardzo często jest nadużywany i niektórym osobom zastępuje użycie zmiennych globalnych. Jednakże są sytuacje, w których warto użyć singletona. Na przykład gdy chcemy pobrać połączenie z bazą danych w ciele funkcji, a nie chcemy dodawać kolejnego argumentu do funkcji.
Przykład singletona dla bazy danych:
<?php class Database { private static $instance; public static function getInstance() { if(self::$instance == null) self::$instance = new Database(); return self::$instance; } private function __construct Database(){ //polacz z bazą tutaj } }
Pierwszą rzeczą która powinna się rzucić w oczy jest prywatny konstruktor. W programowaniu prywatny konstruktor może być użyty tylko wewnątrz klasy, czyli tworzymy obiekt klasy w niej samej. Następnie zwróć uwagę na obiekt $instance oraz na metodę getInstance();
Obiekt $instance służy nam do przechowywania instancji klasy, natomiast metoda getInstance() w przypadku gdy nie ma instancji to tworzy ją, a jeżeli jest to ją zwraca. Słowo static gwarantuje nam to, że w czasie trwania programu/aplikacji będziemy mieli utworzoną wyłącznie jedną instancję klasy Database.
Przykład użycia:
<?php function pobierzDane() { $db = Database::getInstance(); return $db->query('select * from `table`')->fetchAll(); } ?>
Jak widać użycie wzorca Singleton w wielu wypadkach ułatwia programowanie w php. W kolejnym artykule opisze wzorzec Registry, który jest rozszerzeniem Singleton-a.
Zostaw komentarz