![]() |
![]() ![]() |
![]() |
![]()
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:
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 |
|
|
![]()
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 ![]() 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 ![]() -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 9.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki Sephirus
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 15.06.2025 - 14:19 |