2009-01-24 57 views
5

我知道你可以正常使用get_class($ this),但是我需要在一個靜態函數中沒有實例化對象的地方獲得類的名字。可能從PHP中的無效對象獲取當前類的名稱?

請看下面的代碼:

class ExampleClass 
{ 
    static function getClassName() 
    { 
     echo get_class($this); // doesn't work unless the object is instantiated. 
    } 
} 

$test1 = new ExampleClass(); 
$test1->getClassName(); // works 

ExampleClass::getClassName(); // doesn't work 
+0

您可能想要編輯您的問題以瞭解,您瞭解$在靜態情況下沒有任何意義 - 我認爲有些人可能會認爲您不明白'$ this'的含義。 查看我對get_called_class的回答。 – 2009-01-24 22:33:06

回答

3

我想通了,你可以用__CLASS__獲取類名。例如:

class ExampleClass 
{ 
    static function getClassName() 
    { 
     echo __CLASS__; 
    } 
} 
+7

請注意,__CLASS__將返回定義函數的類。如果你擴展它,你將不會得到子類。 – troelskn 2009-01-24 23:19:33

+1

@troelskn:可以很好地咬屁股的提問者。你應該提交這個答案,讓更多的人看到它。 – 2009-01-25 03:02:05

8

我認爲您正在尋找get_called_class()函數,如果您希望從靜態方法獲取類名稱。

有關更多信息,請參見get_called_class documentation

0

我的問題是,你如何設法在不知道類名的情況下調用靜態函數?

只有兩個方法,我能想到的是:

ExampleClass::getClassName(); //Hard Coded - the class name is hard and visible 
$class = "ExampleClass"; 
$class::getClassName();  //Soft Coded - the class name is the value of $class 

或許,如果我們知道在您要撥打電話的情況下更好的解決方案,可以提供?