gpt4 book ai didi

php - 在 php 5.3 之前伪造后期静态绑定(bind)

转载 作者:可可西里 更新时间:2023-10-31 22:14:20 25 4
gpt4 key购买 nike

我需要一个继承的静态函数“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']);

http://php.net/manual/en/function.debug-backtrace.php

关于php - 在 php 5.3 之前伪造后期静态绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/890505/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com