1

私は2つのクラスを持っています:

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 に答える