【发布时间】:2017-05-31 19:47:33
【问题描述】:
这个问题被问了很多次,但似乎没有一个答案适用于此。
我有以下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 是否提供任何方法来覆盖父函数?
亲切的问候
【问题讨论】:
-
见Late Static Binding。或者更好的是,不要使用静态。即,而不是
self::Before();使用$this->Before();。 -
@AlexHowansky 谢谢,不知道我是怎么错过的,解决了!
标签: php class parent overloading