![]() |
![]() ![]() |
![]() |
![]() ![]()
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
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
moze cos takiegO ?
zle sie odwołujesz powinienes
-------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 7.11.2004 Ostrzeżenie: (10%) ![]() ![]() |
Tylko ze z Twoja propozycja to trzeba by wywolywac funkcje:
ClassName::GI("ClassName") tak ? Dlaczego wywolanie Controller::GI()->test(); jest wg Ciebie zle ? |
|
|
![]()
Post
#4
|
|
![]() 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. |
|
|
![]()
Post
#5
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(hawk @ 2004-11-08 10:33:38) To co bela_666 proponuje to już nie będzie singleton. a czemu ? -------------------- |
|
|
![]()
Post
#6
|
|
![]() 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. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 7.11.2004 Ostrzeżenie: (10%) ![]() ![]() |
hm... rozwiazalem to w ten sposob:
opinie, komentarze, itp ;> |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
a na ciorta tak ?
jak masz tą pierwszą klase to mozesz juz Singleton::GetInstance('jakasklasa'); czyba nie ? -------------------- |
|
|
![]()
Post
#9
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(tompaw @ 2004-11-08 19:53:20) hm... rozwiazalem to w ten sposob:
opinie, komentarze, itp ;> przecież hawk powiedział, że to nie singleton ![]() -------------------- |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 7.11.2004 Ostrzeżenie: (10%) ![]() ![]() |
Cytat(Vengeance @ 2004-11-08 19:41:46) a na ciorta tak ? jak masz tą pierwszą klase to mozesz juz Singleton::GetInstance('jakasklasa'); czyba nie ? jak tak teraz na to patrze to chyba rzeczywiscie =] |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Tylko dlaczego w kółko pojawiają się wątki o singletonie, które kończą się tym, że singleton jest olewany i staje na czymś zupełnie innym?
Singleton - najbardziej nadużywany wzorzec wszechczasów. |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 204 Pomógł: 0 Dołączył: 26.12.2003 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
http://zend.com/zend/week/week209.php => TLK: New overloading feature?
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 17.06.2025 - 08:10 |