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)

4

5 回答 5

25

在这种情况下没有区别,因为$this总是指向正确的实例,使用get_class().

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

于 2013-05-13T06:23:19.353 回答
21

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

于 2015-11-06T14:55:33.157 回答
1

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

于 2013-05-13T05:47:01.967 回答
0

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

没有区别。


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

字符串 get_class ([ 对象 $object = NULL ] )

...

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

于 2013-05-13T06:04:48.153 回答
0

在这个实例中没有区别,都是返回类名,但是get_call_class有Late Static Binding

于 2013-05-13T05:45:15.540 回答