1

我有两节课:

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
   }
}

我试图在派生类上调用静态方法,该类调用父类方法而不是被覆盖。这是预期的行为吗?

这就是我尝试使用它的方式:

$controllerInstance = CustomController::getInstance();

我的问题是:为什么 CustomController::getInstance() 不调用 CustomController::createFile()?

4

2 回答 2

6

这是预期的行为。在 php 5.3 之前,静态方法只会调用层次结构中第一个定义的方法。5.3+ 具有后期静态绑定支持,并且能够直接在子类上使用该方法。为此,您需要使用static关键字而不是self

   public static function getInstance()
   {
       //some source, not important...
       static::createFile();// 
   }
于 2013-08-01T14:28:04.897 回答
3

后期静态绑定

采用

static::createFile();

代替

self::createFile();
于 2013-08-01T14:27:33.173 回答