Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> singleton w klasie macierzystej (wydajność)
jx1
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 9.05.2009

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


Wykorzystuje obiekt Singleton do przetrzymywania ustawień aplikacji (często się odwołuje do zmiennych tego obiektu w różnych miejscach, w nim też są trzymane parametry połączenia z bazą danych).
Dajmy na to że mój singleton nazywa się Settings. Tworzę sobie w jakiejś klasie macierzystej zmienną typu protected i w konstruktorze tej klasy mam:
  1. $this->ustawienia = Settings::getInstance();

Wtedy w klasach pochodnych wystarczy, że odnoszę się już do $this->ustawienia. Tak jest dla mnie łatwiej (mniej pisania)

Mam pytanie odnośnie wydajności. Czy mój sposób ze zmienną trzymaną w klasie macierzystej jest dobry czy może powinienem jednak wszędzie gdzie tylko w metodzie potrzebuję dostępu do Settings stworzyć sobie tymczasową zmienną i zaciągnąć Settings przez getInstance?
Czy to że zmienna klasy ma w sobie obiekt (dość duży) nie obciąża mi zanadto aplikacji? Bo przecież jest to zmienna stworzona w klasie bazowej, więc istnieje tez w klasach pochodnych. Jak to działa na zasobożerność i szybkość działania kodu?
Jeśli dobrze myślę to ten mój $this->ustawienia przetrzymuje tylko sam wskaźnik do obiektu więc obciążać nie powinno, ale chcę zapytać mądrzejszych.

Z góry dzięki
Go to the top of the page
+Quote Post
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Moim zdaniem twój sposób jest jak najbardziej ok - dlaczego?

Otóż:

1. Tak jak wspomniałeś przypisanie typu $zmienna = OBIEKT to w praktyce przypisanie jedynie referencji do tego obiektu - zatem nie zajmuje dodatkowej pamięci (poza oczywiście miejscem na przetrzymanie tej referencji - co jest w takim przypadku pomijalne)
2. Różnica pomiędzy tym czy masz jedną zmienną dla wszelkich klas pochodnych z już zapisanym "settings" pod zmienną a tym że wywołujesz to tylko w razie potrzeb może mieć znaczenie jedynie w przypadku gdy istnieje jakiś dajmy na to kontroler (cały - na przykład dana podstrona) w którym nie używasz nic z "settings" wówczas pierwsze wywołanie ::getInstance tworzy obiekt - który tak naprawdę do niczego nie jest potrzebny. Wtedy bardziej opłacało by się wywoływać "setting" jedynie wtedy gdy potrzeba. Jeżeli natomiast "settings" jest na tyle istotne, że wykorzystujesz to w zasadzie w 90% aplikacji to zostawiłbym to tak jak masz (IMG:style_emoticons/default/wink.gif) .
3. Singleton po to został stworzony by ograniczać pamięć zużywaną w aplikacji. Twoje wykorzystanie to osiąga.

Jak dla mnie - jest ok - jeżeli używasz tego w zasadzie wszędzie tak jak pisałem w pkt.2 to jest to wygodne i wcale nie zmniejsza wydajności (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
jx1
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 9.05.2009

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


Dzięki Sephirus
Go to the top of the page
+Quote Post

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: 9.10.2025 - 13:50