Singleton v PHP4 (aktualizováno)
S „pokročilými“ OOP prvky v PHP5 lze tvořit třídy typu Singleton. Bohužel, dnes stále převážná většina webhostingů nabízí jen PHP4 hosting. Naštěstí není tak těžké si metodu na tvorbu Singletonů vytvořit i pro PHP4.
Měl jsem rozpracovaný projekt psaný v PHP5 OOP se všemi
vymoženostmi, ale pro reálné nasazení jsem nyní nucen provést
refaktorizaci směrem ke zpětné kompatibilitě s PHP4. A protože
nechci měnit zaběhnuté metody (kam patří i použití Singletonu) a
vracet se zpět do „prehistorických“ dob, napsal jsem si
jednoduchou factory funkci Singleton():
Update: Doplnil jsem kontrolu, zda-li je zadaná třída vůbec definována. Návratové hodnoty jsou snad všeříkající.
1: function &Singleton($class) {
2: static $class_store = array();
3:
4: $class = strtolower($class);
5: if (!class_exists($class)) {
6: return NULL;
7: }
8: if (!isset($class_store[$class])) {
9: $class_store[$class] =& new $class;
10: }
11: return $class_store[$class];
12: }
Moje řešení je takové externí. Tedy na tvorbu Singletonu se použije funkce s danou třídou jinak nesouvisející. Naopak na webu fredbird.org je metoda getSingleton(), kterou stačí nakopírovat do konkrétní třídy a pak se jí jen dovolávat.
