PHP:get_called_class()vs get_class($ this)

时间:2013-05-13 05:43:03

标签: php oop

在PHP中,get_called_class()get_class($this)在实例中使用时有什么区别?

示例:

class A {
    function dump() {
        echo get_called_class();
        echo get_class($this);
    }
}

class B extends A {}

$A = new A();
$B = new B();

$A->dump(); // output is 'AA'
$B->dump(); // output is 'BB'

这种情况有什么不同吗?

我应该何时使用其中一个get_called_class()get_class($this)

5 个答案:

答案 0 :(得分:20)

在这种情况下没有区别,因为$this始终指向使用get_class()解析类名的正确实例。

函数get_called_class()适用于静态方法。当重写静态方法时,此函数将返回类名,该类名为当前被调用的方法提供上下文。

答案 1 :(得分:12)

要在PHP> = 5.5中更快地替换get_called_class(),请使用static::class。它可以获得静态方法调用的顶级类,以及继承的方法。

答案 2 :(得分:1)

在这种情况下不...如果dump是一个静态方法并且消除了$this参数,那么get_class在两种情况下都会返回“A”,而当你执行B::dump();时,get_called_class将返回“B”

答案 3 :(得分:0)

在这个例子中没有区别,都返回类的名称,但get_called _class具有Late Static Binding

答案 4 :(得分:0)

在这种特殊情况下,答案是:

没有区别。


参考:http://php.net/manual/en/function.get-class.php

  

string get_class([object $ object = NULL])

     

...

     

如果在类中省略了object,则返回该类的名称。