W swoim projekcie chcialem wykorzystac klasy Singleton. Nie chce jednak w kazdej z nich tworzyc osobno tego samego mechanizmu (czyli funkcji get_instance). Postanowilam napisac klase Singleton, a pozostale tworzyc w oparciu o nia. Niestety, pojawil sie problem.
Klasa Singleton wyglada tak:
<?php class Singleton { private function __construct() { } if (self::$instance == null) { self::$instance = new Singleton; } return self::$instance; } }; ?>
Pozniej pojawia sie jakas prosta klasa pochodna i wywolanie jej metody:
<?php class Controller extends Singleton { // stuff here... function test() { } }; Controller::GI()->test(); ?>
Oczywiscie ten kod zwroci blad:
Fatal error: Call to undefined method Singleton::test() in test.php on line x
i jest to zrozumiale. Problem tkwi w jednej linijce metody Singleton::GI(), a mianowicie:
<? self::$instance = new Singleton; ?>
Przez to metoda ta jest na sztywno przypisana do klasy Singleton, ktora w moim przypadku jest klasa czysto wirtualna, tzn chce, aby sluzyla jako podstawa dla innych klas.
Moje pytanie brzmi: jak sprawic, aby tworzony byl obiekt nie klasy Singleton, ale klasy pochodnej od niej, na rzecz ktorej wywolywana jest metoda GI() ?
Probowalem dostac sie do nazwy tej klasy dwojako: przez get_class() oraz __CLASS__. Niestety, zawsze zwracana jest klasa Singleton.
Z gory dzieki za pomoc, pozdrawiam.