self :: method()调用使用父方法而不是被调用的类

时间:2013-08-01 14:23:16

标签: php

我有两个班级:

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()?

2 个答案:

答案 0 :(得分:6)

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

   public static function getInstance()
   {
       //some source, not important...
       static::createFile();// 
   }

答案 1 :(得分:3)

Late Static Binding

使用

static::createFile();

而不是

self::createFile();