![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 7.11.2004 Ostrzeżenie: (10%) ![]() ![]() |
Witam forumowiczow.
W swoim projekcie chcialem wykorzystac klasy Singleton. Nie chce jednak w kazdej z nich tworzyc osobno tego samego mechanizmu (czyli funkcji get_instance). Postanowilam napisac klase Singleton, a pozostale tworzyc w oparciu o nia. Niestety, pojawil sie problem. Klasa Singleton wyglada tak:
Pozniej pojawia sie jakas prosta klasa pochodna i wywolanie jej metody:
Oczywiscie ten kod zwroci blad: Fatal error: Call to undefined method Singleton::test() in test.php on line x i jest to zrozumiale. Problem tkwi w jednej linijce metody Singleton::GI(), a mianowicie:
Przez to metoda ta jest na sztywno przypisana do klasy Singleton, ktora w moim przypadku jest klasa czysto wirtualna, tzn chce, aby sluzyla jako podstawa dla innych klas. Moje pytanie brzmi: jak sprawic, aby tworzony byl obiekt nie klasy Singleton, ale klasy pochodnej od niej, na rzecz ktorej wywolywana jest metoda GI() ? Probowalem dostac sie do nazwy tej klasy dwojako: przez get_class() oraz __CLASS__. Niestety, zawsze zwracana jest klasa Singleton. Z gory dzieki za pomoc, pozdrawiam. Ten post edytował tompaw 7.11.2004, 13:04:21 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Bo to będzie Rejestr. Była jeszcze jakaś inna, mądrzejsza nazwa, ale nie zmienia to faktu, że rejestr to nie singleton. Inny wzorzec.
Bo Singleton służy do teo, aby była tylko jedna instancja klasy, a w twoim przykładzie w ogóle nie będzie żadnej instancji klasy Singleton. Bo w zależności od tego co podamy, dostajemy obiekty różnej klasy, a singleton powinien zawsze dawać tą samą instancję. Po prostu - inny wzorzec. Ani lepszy, ani gorszy, ale na pewno nie singleton. Co nie zmienia faktu że rejestry często są przy okazji singletonami. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 13.10.2025 - 23:14 |