2015-08-31 100 views
1

我想知道調用方法的類的名稱。如何知道調用繼承類的方法的類?

例:

class Mother{ 
    static function foo(){ 
    return "Who call me"; 
    } 
} 

class Son extends Mother{ } 

class OtherSon extends Mother{ } 


Son::foo(); 
>> Son 

OtherSon::foo(); 
>> Other Son 

如何做到這一點?

+1

查找到['__CLASS__'魔術常數](http://php.net/manual/en/language。 constants.predefined.php) –

+0

嘗試使用'get_class' – ElefantPhace

+0

@ElefantPhace作者使用靜態類。 「如果使用除對象以外的任何其他對象調用get_class(),則會引發E_WARNING級別錯誤。」 – DeDee

回答

1

發現使用get_called_class()解決方案:

class Mother{ 
    static function foo(){ 
    echo get_class(),PHP_EOL; 
    echo __CLASS__,PHP_EOL; 
    echo get_called_class(),PHP_EOL; 
    } 

} 

class Son1 extends Mother {} 
class Son2 extends Mother {} 

Son1::foo(); 
Son2::foo(); 

回報:

Mother 
Mother 
Son1 
Mother 
Mother 
Son2 

所以你可以看到get_class__CLASS__都返回Mother,但使用get_called_class()將返回調用該函數的類!

看起來你也可以使用static::class返回相同的,如果使用PHP> = 5.5

+0

謝謝,這是一個問題,會讓我做'硬編碼'。 – olucassantos