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

标签 php oop static

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

相关文章:

php - 带有 Bootstrap 的 eldarion ajax

java - java中从二进制文件中读取对象

javascript - 了解 JavaScript 函数表达式与函数声明,但这是什么?命名函数表达式?

java - 所有静态方法还是单个实例?

Java - 奇怪的静态字符串行为 - 新字符串 ("xxx") 与 "xxx"

javascript - 按最近的位置过滤 WordPress 帖子

php - 在 PHP 中使用 mysql_query 显示用户名不起作用

php - 使用 Stripe 和 PHP 处理可变金额(捐赠)

perl - 在对象实例上调用 new 有什么好处?

c - 返回指向静态变量的局部指针