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):
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:
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:
$output=parent::renderHeader();
ili
$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?
(c) Alan ford