我需要一个继承的静态函数“call”来调用另一个已被覆盖的静态函数“inner”。我可以使用后期静态绑定(bind)来做到这一点,但我的主机还没有 php5.3,所以我需要解决它。
class ClassA{
static function call()
{
return self::inner();
}
static function inner(){
return "Class A";
}
}
class ClassB extends ClassA{
static function inner(){
return "Class B";
}
}
echo "<p>Class A = " . ClassA::call();
echo "<p>Class B = " . ClassB::call();
我希望输出为:
A级=A级
B类=B类
但它是什么:
A级=A级
B 类 = A 类
我的直觉告诉我,我应该能够在 call() 中编写一些东西来检测调用“call()”时引用的对象。因此,它不是 self::inner(),而是类似于 calledclass::inner() 的东西。从原始方法调用中检测要调用的 inner() 的正确版本。
最佳答案
如果性能不是问题,您可以使用 debug_backtrace() 找到被调用的类:
$bt = debug_backtrace();
return get_class($bt[1]['object']);
关于php - 在 php 5.3 之前伪造后期静态绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/890505/