2017-04-13 79 views
1

A类的bar函数需要调用A类的foo函数。 对于A的一个实例,$ this-> bar()起作用。 对于B的情况下,这 - $>巴()不工作,它创建了一个环路B-FOO - A-吧...PHP - 在子实例中调用父函数的父函数

class A { 
    function foo() { 
     (...) 
    } 
    function bar() { 
     $this->foo(); 
     (...) 
    } 
} 
class B extends A { 
    function foo() { 
     parent::bar(); 
     (...) 
    } 
    function bar() { 
     $this->foo(); 
     (...) 
    } 
} 

我想这样的解决方法为 'A' 酒吧函数,但得到错误:“当当前类作用域没有父代时不能访问父::”

class A{ 
    function bar(){ 
     switch (get_class($this)) 
     { 
      case "A" : $this->foo() ; break; 
      case "B" : parent::foo(); break; 
     } 
    } 
} 

任何想法如何做到这一点?

感谢

+0

'自:: foo的();''在A'? – JustOnUnderMillions

回答

1

你卡恩使用self

class A { 
    function foo() { 
     print __METHOD__; 
    } 
    function bar() { 
     print __METHOD__; 
     self::foo(); 
    } 
} 
class B extends A { 
    function foo() { 
     print __METHOD__; 
     parent::bar(); 
    } 
    function bar() { 
     print __METHOD__; 
     $this->foo(); 
    } 
} 
(new A)->bar();//calls A::bar A::foo 
(new A)->foo();//calls A::foo 
(new B)->bar();//calls B::bar B::foo A::bar A::foo 
(new B)->foo();//calls B::foo A::bar A::foo