Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Singletony w PHP 4
seaquest
post
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...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
FiDO
post
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.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 01:14