2013-05-13 60 views
16

在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)

回答

18

在這種情況下沒有區別,因爲$this總是指向正確的實例從類名稱使用get_class()解決。

函數get_called_class()用於靜態方法。當重寫靜態方法時,該函數將返回提供當前正在調用的方法的上下文的類名稱。

0

在這種情況下是沒有區別的,都返回類的名稱,但get_called _class已晚靜態綁定

1

在此情況下...如果轉儲是一個靜態方法,消除$this參數然後get_class會在兩種情況下返回「A」,當你做了B::dump();

0

答案get_called_class將返回「B」,在這種特殊情況下,是:NO

沒有區別。


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

串get_class([對象$對象= NULL])

...

如果對象被省略時內部一個類,該類的名稱被返回。

11

對於PHP> = 5.5中get_called_class()的快速替代方法,請使用static::class。它用於獲取靜態方法調用的頂級類以及繼承方法。

相關問題