Salve a tutti, devo scrivere alcune classi singleton ed invece di fare
il copy/paste del classico metodo che restituisce l'istanza , vorrei
che le classi ereditassero il metodo in questione da una classe padre.
Il mio problema sta nel generalizzare il metodo getInstance, mi spiego
meglio
Codice PHP:
class Singleton
{
protected static $_instance = null;
public static function getInstance()
{
if(self::$_instance === null)
{
$class_name = __CLASS__;//problema
self::$_instance = new $class_name();
}
return self::$_instance;
}
}
class myClass extends Singleton
{
function doStuff()
{
}
}
$m = myClass::getInstance();
$m->doStuff();
E qui mi da errore:
Fatal error: Call to undefined method Singleton::doStuff()
Il che significa che $m è di tipo Singleton e non myCLass.
Googlando ho trovato la soluzione
Codice PHP:
$class_name = get_class(self);
che però non fornisce alcuna stringa in output e mi invia la notice:
Use of undefined constant self - assumed 'self'
Fortunatamente in php 5.3 esiste la funzione get_called_class () ed al momento ho risolto con questa, ma vorrei essere sicuro che la classe funzioni anche su versioni precedenti.
Qualcuno può dirmi come garantire questa retrocompatibilità?
PS spero che php6 migliori in qualche modo la questione ereditarietà perchè così non è affatto semplice... almeno per me che sono abbastanza ignorante di oop
grazie in anticipo