A类的bar函数需要调用A类的foo函数。 对于A的实例,$ this-> bar()有效。 对于B的实例,$ this-> bar()不起作用,它会创建一个循环B-foo - A-bar ......
class A {
function foo() {
(...)
}
function bar() {
$this->foo();
(...)
}
}
class B extends A {
function foo() {
parent::bar();
(...)
}
function bar() {
$this->foo();
(...)
}
}
我为“A'”尝试了这样的解决方法。 bar函数,但得到错误:"无法访问parent ::当前类范围没有父级"
class A{
function bar(){
switch ( get_class($this) )
{
case "A" : $this->foo() ; break;
case "B" : parent::foo(); break;
}
}
}
知道如何做到这一点吗?
由于
答案 0 :(得分: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