Prave jsem na zacatku prepisovani jedny PHP aplikace (eshopu) a mam trochu pochybnosti o tom, jak sem si to rozvrhnul. Mam jednu zakladni tridu shop. Tahle trida obsahuje (jako vlastnosti) instance nejakych jinych trid urcenych pro dilci ukony. Konkretne obsahuje objekty:
- sql (ktera se pta databaze na ruzny veci)
- config (nacte konfiguraci)
- page (na zaklade URI, sessions a dalsich veci zjisti, co vlastne uzivatel chce zobrazit; stara se o to, jak vypadaji adresy podstranek a tak podobne)
- collector (vraci nejak pekne usporadana data, napriklad seznam kategorii eshopu jako array)
- smarty (sablonovaci system)
Jenze napriklad collector potrebuje sahat na sql a page. Page bude potrebovat sahat na collector. Skoro vsechno musi umet esportovat do smarty. Takze to delam tak, ze v konstruktoru tech malych dilcich trid poslu referenci na tu jakoby rodicovskou (zadna dedicnost do toho ale nevstupuje), napriklad v te hlavni rodicovske je:
$this->collector = new CCollector($this);
A tu referenci na $this si uvnitr CCollector ulozim jako $this->parent. Coz funguje a muzu tim padem odevsad sahat vsude, ale vzhledem k tomu, ze se tenhle pristup neopira o zadnou techniku OOP, tak mi to nepripada zrovna cisty. Mimoto psat:
$this->parent->sql->execute(...)
je osklivejsi nez treba:
$this->sql->execute(...)
Nevedel by nekdo jak tohle resit jinak? Klidne i pomoci OOP z PHP 5 (i kdyz pouzivam PHP 4). |