2013-02-18 67 views
0

我有以下类:从调用的方法在父类中派生的静态方法在PHP

<?php 
    Abstract Class A{ 
     public function foo(){ 
      self::bar(); 
     } 

     Abstract public static function bar($arg); 
    } 

    Class B extends A{ 
     public static function bar(){ 
      echo "Class B";  
     } 
    } 

    Class C extends A{ 
     public static function bar(){ 
      echo "Class C"; 
     } 
    } 
?> 

我需要的方法bar()的实例化类从富()调用:

<?php 
    $obj1 = new B(); 
    $obj2 = new C(); 

    $obj1->foo(); // I expect to get 'Class B' 
    $obj2->foo(); // I expect to get 'Class C' 
?> 

在此先感谢。

回答

0

你基本上你叫static::method()抽象类使用late static binding这个

。这使用调用的类的方法。

Abstract Class A{ 
    public function foo(){ 
     // Late static binding 
     static::bar(); 
    } 

    abstract public static function bar(); 
} 
+0

-1 - 此示例代码确实违反严格的PHP标准,因此吐出通知。 – hakre 2013-02-18 07:28:22

+0

@hakre - 它没有 – Galen 2013-02-18 16:23:28

+0

请参阅:http://3v4l.org/Ytl4m – hakre 2013-02-18 16:24:54

相关问题