![]() |
![]() |
![]() ![]()
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%) ![]() ![]() |
Odwołanie Controller::GI()->test() jest jak najbardziej poprawne.
To co bela666 proponuje to już nie będzie singleton. @tomapaw: tego się raczej nie da zrobić. Nie tylko w php, w innych językach również. Chociaż w php miałoby to większe szanse powodzenia, bo php jest interpretowany. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 8.10.2025 - 14:50 |