Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP5] Rozszerzanie singletona?
MacDada
post
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 1
Dołączył: 24.06.2010
Skąd: Sopot

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


Hej,

mam sobie klasę DB, która zajmuje się łączeniem z bazą danych oraz obsługą błędów. Gdy chcę zrobić coś z danymi tworzę nową klasę rozszerzającą klasę DB i w niej umieszczam odpowiednią metodę.

Zależy mi na możliwie dużej wydajności, stąd nie tworzę uniwersalnej klasy ze wszystkimi możliwymi metodami, ale każdy rodzaj działania na bazie wymaga oddzielnej klasy, żeby była ona możliwie najkrótsza.

Klasa DB:
http://wklej.to/O7pd

Przykładowa klasa pobierająca dane użytkownika:
http://wklej.to/Glmo

Przykładowe zastosowanie:
http://wklej.to/3TPK

Przykładowy wynik:
http://wklej.to/UOtk

Problem pojawia się, gdy chcę skorzystać z dwóch różnych operacji na bazie – niepotrzebnie wtedy uruchamiam dwie instancje klasy DB, czyli niepotrzebnie zajmuję pamięć i wielokrotnie łączę się z bazą zamiast skorzystać z jednego połączenia.

Chciałem zrobić klasę DB jako singleton i tu się pojawia pytanie:
czy mogę rozszerzać singletona? Jak to wtedy wywołać?

Chodzi o to, żeby mieć jedną instancję klasy bazowej DB, z którego korzystać może wiele innych klas ją rozszerzających.

Dzięki i pozdr.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Dokładnie, obsługą samej bazy powinna zajmować się oddzielna klasa, natomiast główny model danych to powinna być inna klasa, która połączenie z bazą pobiera w konstruktorze i to ona dopiero obsługuje zapytania i błędy natomiast poszczególne metody dostępu do danych mogą być rozszerzeniem tej klasy. Moim zdaniem dobrze przyjąć koncepcje, że jedna tabela w bazie = jeden model zawierający metody korzystające z tej tabeli. Bo inaczej jak? Potężna klasa do obsługi każdego "select * from tabela"? Get user może wyglądać tak:
  1. class Model_User extends Model_Glowny{
  2. protected $table_name = 'Tusers';
  3.  
  4. public function getUser($id){
  5. $sql='SELECT `name`, `login`, `avatar`, `user_manager`, `event_manager` FROM `Tusers` WHERE id=$id';
  6. $sql = $this->prepare($sql);
  7. return $this->query($sql);
  8. }
  9.  
  10. public function countUsers(){
  11. //i tak dalej
  12.  
  13. }
  14. }


Spójna koncepcja nazewnictwa i komentarze też mile widziane.
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: 10.06.2026 - 11:10