[ mika @ 30.03.2007. 14:16 ] @
Pozdrav svima, Pisem jednu veliku intranet aplikaciju koristeci PHP kao Front controler, Input Filter, Model i View, a AJAX kao Command controller. Pojavile su mi se izvesne nedoumice, a to cu najbolje opisati kroz kod. Osnovna klasa za View (jaaako uprošćeno, jednostavnosti radi): Code: abstract class baseViewHTML { final static function renderHeader(){ return "<br> Header <br>"; } final static function renderFooter(){ return "<br> Footer <br>"; } private static function renderSidebar(){ //function to make standard sidebar return "<br> Sidebar <br>"; } abstract static function renderContent(); } Klasa koja nasledjuje baseViewHTML klasu: Code: class sampleModuleViewHTML extends baseViewHTML { public static function renderContent(){ return "<br> Content <br>"; } private static function renderSidebar(){ return "<br> Module - specific Sidebar <br>"; } public function render(){ $output=""; $output=parent::renderHeader(); #nedoumica br.1 $output.=self::renderSidebar(); $output.=self::renderContent(); $output.=parent::renderFooter(); #nedoumica br.2 return $output; } } Komentar: glavna klasa formira header i footer (metode su deklarisane kao final, i ne mogu se menjati kroz nasledjene klase); takodje formira interface za prikaz glavnog sadrzaja (apstraktna metoda renderContent), i formira funkciju za prikaz "sidebara" (dela View-a koji prikazuje razne sitne informacije); sidebar moze, a i ne mora biti definisan kroz nasledjene funkcije, s obzirom da je standardan sidebar definisan u glavnoj klasi. Nedoumice: ako u klasi sampleModuleViewHTML u funkciji render() napisem: Code: $output=parent::renderHeader(); ili Code: $output=self::renderHeader(); ...dodje mu na isto? Kako je to moguce? Zar ne bi PHP engine trebalo da javi gresku ako se napise $output=self::renderHeader(); s obzirom da je u glavnoj klasi ta metoda deklarisana kao final? Isto pitanje je i za deo $output.=parent::renderFooter();. Takodje, izgleda da je nemoguce metodu u glavnoj klasi deklarisati kao abstract private, da joj ogranicim "vidljivost" kroz abstraktni interface? 10x unapred, da li je jos neko imao ovakve nedoumice? |