2010-02-20 107 views
1

好的,帖子標題可能有點混亂。php:在靜態方法中獲取繼承類的名稱

我有這樣的代碼:

class A { 
    public static foo() { 
     return get_called_class(); 
    } 
} 

class B extends A { 

} 

class C { 
    public function bar() { 
     echo B::foo(); 
    } 
} 

輸出:C

我想foo​​中獲得()是B類的名字我怎麼能做到這一點,而不在B類的變化?

問候, 揚奧利弗

PS:__ __類,get_class()不工作。

+0

[PHP:從擴展類中的靜態調用中獲取類名。](http://stackoverflow.com/questions/506705/php-get-classname-from-static-call-in-extended-class) – outis 2011-06-23 03:50:14

回答

2

在PHP 5.3之前,這是不可能的,沒有黑客,被稱爲晚期靜態綁定,一個可以googleable的術語。

如果你有興趣,這裏是SO文章的答案:Faking Late Static Binding before php 5.3

+1

我閱讀了php的文檔,但是我沒有找到解決我的問題的解決方案,因爲我不想更改B類。 – janoliver 2010-02-20 14:11:49

+0

正如我所提到的,如果你使用低於5.3的php,沒有我提供的黑客是不可能的:http://stackoverflow.com/questions/890505/faking-late-static-binding-before-php-5-3/1554813#1554813 – 2010-02-20 14:44:03