Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: singleton w klasie macierzystej (wydajność)
Forum PHP.pl > Forum > PHP > Object-oriented programming
jx1
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
Sephirus
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 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 wink.gif
jx1
Dzięki Sephirus
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.