PHP:get_调用的_class()返回意外值

PHP:get_调用的_class()返回意外值,php,static,self,Php,Static,Self,使用PHP5.3+并使用与以下内容相等的内容,我得到的输出是“C”而不是“B”: class A { public static function doSomething() { echo get_called_class(); } } class B extends A { public static function doMore() { self::doSomething(); } } class C ex

使用PHP5.3+并使用与以下内容相等的内容,我得到的输出是“C”而不是“B”:

class A
{
    public static function doSomething()
    {
        echo get_called_class();
    }
}

class B extends A
{
    public static function doMore()
    {
        self::doSomething();
    }
}

class C extends B {}

C::doMore();
如果我使用了static::doSomething(),这将是预期的结果,但是当使用self::doSomething()时,我希望在B的范围内调用此方法,因为它是定义“self”的地方,而不是后期静态绑定的地方

这是如何解释的?如何在doSomething()方法中得到“B”


提前感谢,JS

重写doSomething方法,以获得
B

class C extends B
{
    public static function doMore()
    {
        B::doMore();
    }
}
测试
这里的问题是。
get\u called\u class()
函数将使用后期静态绑定返回类名,
\uu class\uuu
如果使用
static::
调用,则将使用后期静态绑定,但与
$this->
self:
一起使用时则不会。我不知道如何让它返回
B
而不是
a
。如果您使用的是PHP5.4,听起来这将是traits的理想用法

例如:

class A
{   
    public static function doSomething()
    {   
        echo __CLASS__;
    }
}

class B extends A
{   
    public static function doMore()
    {   
        self::doSomething();
    }
}

class C extends B {}

C::doMore();

使用parent返回
A
而不是
C

并不能解决问题,因为get\u called\u class()仍然返回“C”,但在这种情况下我需要“B”。即使使用B::doSomething也会给我一个“C”作为输出。我刚刚在PHP5.4上进行了测试。它返回
C
感谢您的测试,这正是我所期望的。但在那个地方我需要'B',我可以用什么来代替将_称为_类来实现这一点(除了摆弄回溯)?