PHP:get_调用的_class()返回意外值
使用PHP5.3+并使用与以下内容相等的内容,我得到的输出是“C”而不是“B”: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
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',我可以用什么来代替将_称为_类来实现这一点(除了摆弄回溯)?