2013-03-01 49 views
1

請幫幫我。 例如,我有一個Foo類,它擴展自Bar類。如何確定子類中的方法調用方式

class Bar 
    { 
      public function __call($func, $args){ 
       echo "Calling method {$func}"; 
      } 
      public function __callstatic($func, $args){ 
       echo "Calling static method {$func}"; 
      } 
      public function run(){ 
       echo "calling Bar::run method \n"; 
      } 
    } 
    class Foo extends Bar 
    { 
      public $objBar; 
      public function __construct(){ 
       $this -> objBar = new Bar(); 
      } 
      public function callViaObject(){ 
       $this -> objBar -> run(); 
       $this -> objBar -> run1(); 
      } 
      public function callViaParent(){ 
       parent::run(); 
       parent::run1(); 
      } 
    } 
    $foo = new foo(); 
    $foo -> callViaObject(); 
    /* output 
     calling Bar::run method \n 
     Calling method run1; */ 
    $foo -> callViaParent(); 
    /* output 
     calling Bar::run method \n 
     Calling method run1; !! */ 

這裏有一個問題,當我從子類中調用方法與parent::,和父類有一個對象,調用方法parent::不是靜態調用。

那麼我該如何檢查Bar類,該如何調用該方法? 我可以檢查呼叫類型是否爲父::?

非常感謝你!

+0

你有沒有試圖改變'__callstatic'成'__callStatic'(注意大寫S)?這可能是原因。 – aaaaaa123456789 2013-03-01 11:03:20

+0

我嘗試過,但它是一樣的。 – 2013-03-01 11:18:50

+1

https://bugs.php.net/bug.php?id=53826 – realization 2013-03-01 11:35:52

回答

1

添加private static function run1() {}在你的A級

+0

謝謝你!但@ diplex19已經幫了我。 [鏈接] https://bugs.php.net/bug.php?id=53826 – 2013-03-01 18:56:34