2010-10-06 56 views
0

有什麼辦法從靜態關鍵字獲取派生類名稱? 我真正想要做的是。PHP的靜態:: DerivedClassName

使派生類的反思
檢查Wheather它實現指定的類或不

我有一個靜態方法的基類說其命名爲Base::check() 我想Base::check()將檢查的存在接口實現。 ()方法知道接口的名稱,所以我不需要從外部世界告訴它。

但是,如果沒有辦法從靜態關鍵字獲取DerivedClassName我需要將類名傳遞給外部世界的方法。這不是一個好的編碼原則。

我能做的另一種選擇是。我可以創建一個返回this的靜態方法::instance(),我可以從它的返回中執行get_class。但是這也推動了我的應用原則。

那麼第一種方法真的有可能嗎?或者我需要去尋找這種替代方案? 或者您有其他類型的替代品嗎?

回答

2

我不知道我是否理解你正在嘗試做什麼,特別是你的意思是「從靜態關鍵字獲得派生類名」。看看下面的功能,看看他們做你想做的事:

如果你指的Late Static binding,看看


我想你正在嘗試做的像這樣:

class Base 
{ 
    public static function check() 
    { 
     return in_array('IFoo', class_implements(get_called_class(), FALSE)); 
     // or 
     $instanceClassName = get_called_class(); 
     return new $instanceClassName instanceof IFoo; 
     // or 
     $reflector = new ReflectionClass(get_called_class()); 
     return $reflector->implementsInterface('IFoo');   
    } 
} 
interface IFoo {}; 
class Foo extends Base implements IFoo {} 

var_dump(Foo::check()); 
+0

你和你有'static'關鍵字,你被要求得到這個類的名字。那就是事情。 – 2010-10-06 16:50:56

+0

雅謝謝。我錯過了get_called_class()在靜態工作。 – 2010-10-07 08:02:12