[php5] dynamiczne rozszerzanie mozliwosci klasy

0

witam,

Mam nastepujacy problem... ale opisze najpierw co robie i czego mi brakuje.

Tworze sobie plik index.php w którym uruchamiam klase CMS w ktorej tworze obiekt DB po wczytaniu informacji z pliku config.php . Teraz w tej klasie jest metoda ktora doczytuje sobie odpowiedni kontroler dla danej czesci strony / panelu administracyjnego. Niestety aby obiekt controller mogl laczyc sie z baza musze przekazac mu kopie obiektu db.

Niektore moduly w niekturych kontrolerach beda sie powtazac stad tez chciałam sobie stworzyc cos w rodzaju $this->loadModule('nazwa') i poszerzyc wlasciwosci danego kontrolera poniewaz tworzac w nim nowy obiekt nie moge odwolac sie do tej struktury ktora dotad stworzylam a nawet jesli okresle nowym obiektom w obiekcie CMS zeby dziedziczyly po nim to i tak musze im przekazywac kopie bazy i dostepu do szablonow ktore wyswietlam za pomoca SMARTY (CMS extends Smarty)

No i pytanie jak to mozna ładnie powiązać zeby nie trzeba było wszystkiego robic kopii za każdym razem.

0

Nie do konca zrozumialem, ale moze zainteresuje Cie wzorzec Dekorator?

0

Hmmm nie slyszałam o tym. Chodzi mi o to aby móc płynnie z innych obiektow pobieraz właściwości i metody nie kopiując z obiektu do obiektu wszystkich danych konfiguracyjnych...

tworze obiekt a
wczytuje do niego konfiguracje (smiga ;-) )
w tym obiekcie a tworze obiekt b i c
i teraz chce aby w tych obiektach było to co wczytalam z zewnatrz do obiektu a ;-)

0

A nie wystarczy zrobic cos w rodzaju:

class dupa
{
   private static $modules = array();

   protected function &loadModule($mod)
   {
     if ($this->modules[$mod] == '')
     {
       require_once 'moduly/'.$mod.'.php';
       $this->modules[$mod] = new $mod;
     }

    return $this->modules[$mod];
  }
}

i teraz w swoich klasach dziedziczysz po klasie dupa ;) Masz dostepna metode loadModule() ktora zwraca instancje obiektu, obiekt tworzony jest tylko raz wiec nie ma nie wiadomo ile polaczen do bazy danych itp.

ps. Nie wiem czy kod dziala poprawnie, jest to tylko takie proof of concept ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1