Post
#1
|
|
|
Grupa: Przyjaciele php.pl Postów: 790 Pomógł: 7 Dołączył: 6.02.2003 Skąd: Polska Ostrzeżenie: (0%)
|
No cóż. Staram się napisać uniwersalny kod (dla php4 i php5), oczywiście piszę obiektowo i chciałbym użyć singletonów. I w związku z tym moje pytanie: Jak rozwiązujecie problem singletonów w php 4?
Pytanie zadaję w osobnym topicu, ponieważ w wielu tematach jest to poruszane, ale nie rozwiązywane. Myślę, że jeśli zgromadzimy tutaj wszystkie kody/odpowiedzi, to może ktoś stworzy naprawdę dobry kod kontrolujący liczbę instancji w aplikacji (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Czekam na rozwiązania... |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%)
|
Cytat A ja myślę, że to nie jest taki całkiem singleton, bo w tym wzorcu konstruktor MUSI być prywatny, bo jak inaczej chesz wymusić na programiście-kliencie używanie jakiejś metody do towrzenia instancji klasy? A tak robisz prywatny konstruktor i klasa sama w sobie tworzy obiekt i zwraca referencję do niego.
Tak jak mowisz, tyle ze w jak napisal juz hawk w php4 nie da sie tak zrobic bo nie ma modyfikatorow dostepu. Ten kod jest wynikiem metamorfozy tego: Kod #include <iostream>
using namespace std; class Singleton { static Singleton *instance; Singleton() : cos(0) { cout << "Singleton::Singleton()n"; } public: int cos; static Singleton* GetInstance() { if (Singleton::instance == NULL) { Singleton::instance = new Singleton; } return Singleton::instance; } }; Singleton* Singleton::instance = NULL; int main() { Singleton *a, *b, *c; a = Singleton::GetInstance(); b = Singleton::GetInstance(); c = Singleton::GetInstance(); cout << a->cos << ", " << b->cos << ", " << c->cos << endl; a->cos++; cout << a->cos << ", " << b->cos << ", " << c->cos << endl; b->cos++; cout << a->cos << ", " << b->cos << ", " << c->cos << endl; return 0; } Jest to kod, ktory "stworzylem" przed tym w php, zeby sie upewnic, ze da sie zrobic "idealny" singleton (obiekt tworzony tylko i wylacznie za pomoca statycznej metody), kod jest w Cpp i staralem sie maxymalnie go odzwierciedlic, ale jak widac malo z tego co mozna w Cpp da sie w php4, stad ta umowna prywatnosc konstruktora. Cytat W sumie w rozwiazaniu FiDO nie podoba mi sie to, ze instancja jest przechowywana w metodzie, ale moze to jedyne rozwiazanie...
Niestety chyba jedyna, tez wolalbym zeby to wygladalo tak jak w przykladzie wyzej, ale w php4 nie ma statycznych pol w klasach, wiec mozna tylko tak. |
|
|
|
seaquest Singletony w PHP 4 13.04.2004, 13:12:13
halfik Generalnie to piszę póki co sturkturalnie, ale gdy... 13.04.2004, 14:13:10
rzseattle Najlatwiej jest uzyc zmiennej statycznej:
[PHP] po... 13.04.2004, 16:58:08
seaquest rzseattle: prawdę mówiąc to ten kod (mnie przynajm... 13.04.2004, 17:17:09
halfik W JAVA zrobiłbym to tak:
class Test{
private Te... 13.04.2004, 17:39:09
FiDO Podczas moich prob dojscia do tego jak sie je stos... 13.04.2004, 18:19:15
halfik A ja myślę, że to nie jest taki całkiem singleton,... 14.04.2004, 09:34:14
hawk CytatA ja myślę, że to nie jest taki całkiem singl... 14.04.2004, 11:25:49
rzseattle Cytatrzseattle: prawdę mówiąc to ten kod (mnie prz... 14.04.2004, 12:12:26
halfik CytatUhm, w PHP4 raczej nie ma prywatnych konstruk... 14.04.2004, 13:25:51
seaquest hmm haflik nie wiem czy do konca przeczytales tema... 14.04.2004, 15:05:46
Cudi Hmm... od 3 tygodni mam gotowy zarys artykułu o Si... 14.04.2004, 16:12:14 ![]() ![]() |
|
Aktualny czas: 23.12.2025 - 01:14 |