Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Jak używać Singleton w klasach
Matado
post
Post #1





Grupa: Zarejestrowani
Postów: 67
Pomógł: 0
Dołączył: 9.12.2008

Ostrzeżenie: (0%)
-----


Chciałbym wykorzystać Singleton w moim systemie newsowym. Wziąłem tą implementacje z phpedia.pl, ale mam problem. Jak użyć Singleton żeby można było go wykorzystywać w moich klasach?
Czy trzeba dołączyć plik z klasą Singleton do mojej klasy przez include() czy co, tylko jak później tego użyć np. z łączeniem się przez PDO?
Jak w ogóle go użyć do łączenia się z bazą danych przy kilku klasach?

Implementacja z phpedia.pl
  1. <?php
  2.  
  3. final class Singleton
  4. {
  5.    /**
  6.      * Przechowuje instancję klasy Singleton
  7.      *
  8.      * @var object
  9.      * @access private
  10.      */
  11.    private static $oInstance = false;
  12.  
  13.    /**
  14.      * Zwraca instancję obiektu Singleton
  15.      *
  16.      * @return Singleton
  17.      * @access public
  18.      * @static
  19.      */
  20.    public static function getInstance()
  21.    {
  22.        if( self::$oInstance == false )
  23.        {
  24.            self::$oInstance = new Singleton();
  25.        }
  26.        return self::$oInstance;
  27.    }
  28.  
  29.    private function __construct() {}
  30. }
  31. ?>


Przykładowa klasa
  1. <?php
  2.  
  3. class news
  4. {
  5.    public function __construct()
  6.    {
  7.        
  8.    }
  9.    
  10.    public function somemethod()
  11.    {
  12.  
  13.    }
  14. }
  15.  
  16. ?>


Ten post edytował Matado 29.04.2009, 13:42:53
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Cytat(Crozin @ 18.05.2009, 22:16:17 ) *
Korzystanie z singletona w klasie obsługującej bazę danych to imo jedna z najgłupszych rzeczy. A co jak będziesz chciał używać dwóch połączeń do dwóch różnych baz?


Dopisujesz metode ktora przelacza na druga baza i w razie potrzeby można wrócić do pierwszej. Ale tak naprawde wyjatkowo rzadko trzeba się łączyć z innymi bazami. Wiec singleton do bazy danych jest idealny.

Cytat(Crozin @ 18.05.2009, 22:16:17 ) *
Lepiej jest przekazać obiekt poprzez parametr w konstruktorze innego obiektu:


Wiec bawi cię przekazywanie referencji do obiektu do każdej klasy? Sorry, ale wlasnie dlatego wybieram singletona zeby nie mieć takich krzaczków.
A jak nagle mi sie zachce w pewnej klasie uzywac bazy danych to nie czeka mnie bezsensowne dopisywanie argumentów do konstruktora.

Zapewne może jeszcze paść argument o global ale jak wszyscy wiemy, global to zło.

Ten post edytował wookieb 18.05.2009, 21:26:44
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 12:05