在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)
?
答案 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,则返回该类的名称。