Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Uniwersalna klasa Singleton, Napisana raz, wykorzystywana wiele...
tompaw
post 7.11.2004, 12:33:33
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 7.11.2004

Ostrzeżenie: (10%)
X----


Witam forumowiczow.

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:

  1. <?php
  2. class Singleton {
  3.  
  4. private static $instance = null;
  5.  
  6. private function __construct() {
  7. }
  8.  
  9. public static function GI() {
  10. if (self::$instance == null) {
  11. self::$instance = new Singleton;
  12. }
  13.  
  14. return self::$instance;
  15. }
  16. };
  17. ?>


Pozniej pojawia sie jakas prosta klasa pochodna i wywolanie jej metody:

  1. <?php
  2. class Controller extends Singleton {
  3.  
  4. // stuff here...
  5.  
  6. function test() {
  7. }
  8.  
  9. };
  10.  
  11. Controller::GI()->test();
  12. ?>


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:

  1. <?
  2. self::$instance = new Singleton;
  3. ?>


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.

Ten post edytował tompaw 7.11.2004, 13:04:21
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Wersja Lo-Fi Aktualny czas: 15.08.2025 - 01:17