PHP:get_called_class()与get_class($this)的区别

22
在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个回答

26
在这种情况下没有区别,因为$this总是指向正确的实例,从中使用get_class()来解析类名。
函数get_called_class()用于静态方法。当静态方法被重写时,此函数将返回提供当前被调用方法上下文的类名。

22

在 PHP >= 5.5 中,更快速的替代方案为 get_called_class(),使用 static::class。它可用于获取静态方法调用的顶层类,以及继承的方法。


1

在这种情况下不是这样的......如果dump是一个静态方法并且去掉$this参数,那么无论哪种情况get_class都会返回"A",而当你执行B::dump();时get_called_class将返回"B"


0
在这种情况下,两者没有区别,都返回类的名称,但是get_called_class具有后期静态绑定。

0

在这种情况下,答案是:没有

没有区别。


参考: (http://php.net/manual/zh/function.get-class.php)

string get_class ([ object $object = NULL ] )

...

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接