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.



Zanechte komentář

XHTML: Můžete použít tyto tagy: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> . Text komentáře se formátuje podle syntaxe Texy! pro komentáře. Dva entery pro odstavec, jeden enter a mezera na začátku řádku pro zalomení řádku.