Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Sens stosowania singleton w php
Jarod
post
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Piszę sobie klasę do obsługi bazy danych i przyglądam się tak bardzo popularnemu wzorcowi singleton. Wszyscy jako przykład użyteczności tego wzorca podają przykład tworzenia instancji klasy do obsługi bazy, tzn połączenia z bazą. Zacząłem się zastanawiać gdzie jest sens, oczywiście w języku php. Zakładam, że mam taką klasę i w skrypcie łącze się z bazą danych, jeśli nie ma nawiązanego połączenia to tworzę obiekt tej klasy a jeśli jest to nie tworzę.

Wszystko jasne. Tylko gdzie jest sens stosowania tego w php. Przecież w skrypcie zazwyczaj tworzy się połączenie z bazą, wykonuje potrzebne operacje na bazie a po zakończeniu wywoływania skryptu, połączenie i tak jest zamykane automatycznie.. Więc jaki jest sens stosowania tego w php?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Jarod
post
Post #2





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Na razie mój pomysł dotyczy korzystania w aplikacji z jednej bazy.

Przykładowy plik konfiguracyjny:
Kod
[Db]
Type        = mysql
Host        = 127.0.0.1
Port        = 3306
User        = user
Password    = pass
Base        = test2


Interfejs:
  1. <?php
  2. interface Cube_DatabaseInterface
  3. {
  4. public function __construct();
  5. public function connect();
  6. public function query();
  7. public function update()
  8. // i inne potrzebne metody
  9. }
  10. ?>


Klasa do obsługi Mysql:
  1. <?php
  2. class Cube_Mysql implements Cube_DatabaseInterface
  3. {
  4.  //bedzię zawierać metody wymagane przez interfejs
  5. }
  6. ?>



  1. <?php
  2. class Cube_Postgresql implements Cube_DatabaseInterface
  3. {
  4.  //bedzię zawierać metody wymagane przez interfejs
  5. }
  6. ?>


Wszystkie metody będę w ten sam sposób wywoływane (te same parametry) aby zachować możliwość zmiany klasy beż konieczności przerabiania kodu aplikacji.

Sposób tworzenia obiektu zależeć będzie od sposobu implementacji klasy. Mam klasę Config (wzorowałem się na sposobie hwao - uprościłem ją i zmieniłem), która parsuje plik ini i tworzy klasę z właściwościmi statycznymi, która jest dołączana do aplikacji.

Wywołanie będzie się odbywać mniej więcej w taki sposób.

  1. <?php
  2. if ($Db::Type == 'mysql') require_once('Cube_Mysql.class.php');
  3. else require_once('Cube_Pgsql.class.php');
  4. ?>

Jeśli napiszę więcej klas do obsługi innych baz przerobi się to na switch'a

W ten sposób to widze. Problemem może być tak jak pisałem wyżej, jeśli zechcemy korzystać w jednej aplikacji z kilku różnych baz. Można też zamiast if lub switch dołączać klasę w ten sposób:
  1. <?php
  2. require_once('Cube_'.$DbType.'class.php');
  3. ?>

ale to już drobnostka..
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: 4.10.2025 - 07:10