如何获取 PHP parent 函数以引用 child 中存在的重写函数?
How to get PHP parent functions to reference overridden functions in child if they exist?
给定以下代码:
class A {
public static function one() {
return "results from Parent::one";
}
public function two() {
return "Parent::two got info: ".self::one();
}
}
class B extends A {
public static function one() {
return "results from child::one";
}
}
$a=new B();
print "calling two I get: ". $a->two()."\n";
print "calling one I get: ". $a->one()."\n\n";
我得到以下结果:
calling two I get: Parent::two got info: results from Parent::one
calling one I get: results from child::one
我预计上面的第一个结果是:
calling two I get: Parent::two got info: results from child::one
似乎虽然覆盖有效,但它们不能递归地工作,只能在 child 的直接调用中起作用。有没有办法确保当 child class 从 parent 访问方法时, parent 方法引用存在的被覆盖的方法?
谢谢
您可能正在寻找后期绑定。只需将 self::one()
更改为 static::one()
即可。
return "Parent::two got info: ".static::one();
给定以下代码:
class A {
public static function one() {
return "results from Parent::one";
}
public function two() {
return "Parent::two got info: ".self::one();
}
}
class B extends A {
public static function one() {
return "results from child::one";
}
}
$a=new B();
print "calling two I get: ". $a->two()."\n";
print "calling one I get: ". $a->one()."\n\n";
我得到以下结果:
calling two I get: Parent::two got info: results from Parent::one
calling one I get: results from child::one
我预计上面的第一个结果是:
calling two I get: Parent::two got info: results from child::one
似乎虽然覆盖有效,但它们不能递归地工作,只能在 child 的直接调用中起作用。有没有办法确保当 child class 从 parent 访问方法时, parent 方法引用存在的被覆盖的方法?
谢谢
您可能正在寻找后期绑定。只需将 self::one()
更改为 static::one()
即可。
return "Parent::two got info: ".static::one();