我有两个班级:
class JController{
public static function getInstance()
{
//some source, not important...
self::createFile();//
}
public static function createFile()
{
// this is base class method
}
}
class CustomController extends JController{
public static function createFile()
{
// this is overriden class method
}
}
我试图在派生类上调用静态方法,该方法调用parent方法而不是覆盖。这是预期的行为吗?
这就是我尝试使用它的方式:
$controllerInstance = CustomController::getInstance();
我的问题是:为什么CustomController :: getInstance()调用CustomController :: createFile()?
答案 0 :(得分:6)
这是预期的行为。在php 5.3之前,静态方法只会从层次结构中的第一个定义中调用该方法。 5.3+具有late static binding支持,并且具有直接在子类上使用该方法的能力。为此,您需要使用static
关键字而不是self
:
public static function getInstance()
{
//some source, not important...
static::createFile();//
}
答案 1 :(得分:3)