0
這是一個被問了很多次的問題,但沒有一個答案似乎適用於此。覆蓋父功能
我有以下PageBase
類:
<?php
class PageBase {
public $templatefile = '404';
function Before() {}
function After() {}
function Display() {
$smarty = System::GetSmarty();
$smarty->display('views/'.$this->templatefile.'.tpl');
}
function Run() {
self::Before();
self::Display();
self::After();
}
}
所有這個類的做的就是爲我的其他網頁的基礎;這些頁面可能或不需要在顯示頁面之前/之後運行自己的代碼,並且它們通常都有自己的$templatefile
。例如我的Home
類;
<?php
class Home extends PageBase {
public $templatefile = 'home';
function Before() {
var_dump($_REQUEST);
}
function After() {}
}
我遇到的問題是,正確的模板文件(home
)被加載,但在Home::Before()
代碼不通過實例$home->Before()
跑,PageBase::Before()
改爲跑了。
解決此問題的正確方法是什麼? PHP提供任何方法來覆蓋父級的功能嗎?
親切的問候
請參閱[後期靜態綁定](http://php.net/manual/en/language.oop5.late-static-bindings.php)。或者更好的是,不要使用靜態。即,而不是'self :: Before();'使用'$ this-> Before();'。 –
@AlexHowansky謝謝,不知道我是如何錯過的,修復它! – Ieuan