Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Singleton w większości klas
Forum PHP.pl > Forum > Przedszkole
lukasamd
Witam,
mam pytanie odnośnie wzorca singleton. Jak na moje potrzeby, będę go chyba używał w większości klas w projekcie.
No i teraz pytanie: czy jest sens się powtarzać i w każdej klasie wklepywać odpowiedni kod? No chyba nie bardzo.

Jak więc to zrealizować?
Myślałem o tym, aby zrobić, ażeby konstruktory każdej klasy zawierały opcjonalny pierwszy albo ostatni parametr, określający, czy ma być używany singleton czy nie.

Pytanie: jak to w ogóle zrealizować? Wszystko do klasy abstrakcyjnej (o ile dobrze rozumiem jej założenia - w OOP raczkuję)?
pablo89pl
Klasa abstrakcyjna zdefiniuje CI tylko metody ktore klasa dziedzicząca po niej musi zawierać...
Ogólnie powiedz po co chesz stosowac singletona, zalezy od wykorzystania, ale ogólnie nie polecałbym, można zawsze inaczej coś zrobić, ale to neich się wypowiedzą guru...

Ale jak juz chcesz miec w każdej klasie to mozesz dodać na dzieńdobry pierwszy parametr okreslajacy czy dac tego singa, i w kazdej klasie w konstruktorze sprawdzanie czy ten pierwszy parametr jest true(wtedy robisz singla) albo false(wtedy robisz nowa kopie)
ucho
Najwyraźniej nie zrozumiałeś wzorca skoro nie wiesz jak go zaimplementować. Singleton praktycznie w każdym języku wygląda tak samo: konstruktor z modyfikatorem private/protected, prywatna statyczna zmienna 'instance' zainicjalizowana nullem, publiczna statyczna metoda getInstance(), która w razie potrzeby tworzy instancje, zapisuje ją do zmiennej i zwraca.
Z singletonem jest tylko jeden malutki problem - to horror w przypadku testowania. Jako, że nie ma żadnego wygodnego frameworka DI dla PHP (APC i podobne zjadają komentarze do pól i klas, w których są metadane :/) to zamiast singletonów proponuje wzorzec Registry.

Edit: Co do powtarzania kodu odpowiedzialnego za singleton - osobiście nie widzę w tym problemu, ale z łatwością znajdziesz kilka różnych implementacji bazowego singletona np. http://noteslog.com/post/yet-another-singl...ass-in-php-5-3/ .
lukasamd
No właśnie w sposób opisany przez ucho chcę go wykorzystać, no i w celu minimalizacji obciążenia.

@pablo89pl:
Tak, z tym nie ma problemu, ale myślę, że można to zrobić jakoś bez powtarzania się w każdej klasie (jakoś automatyczne realizowanie - tyle tylko, że wszystkie klasy muszę wtedy iść przez nadrzędną, która sprawdza to).
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.