2010-08-23 56 views
0

讓我們這個類一般繼承(不只是)在PHP

class A { 
    protected static function ident() { return "I am A"; } 
    public static function say() { return "I say '".self::ident()."'!"; } 
} 

然後,我需要延長A類並覆蓋IDENT()這樣

class B extends A { 
    protected static function ident() { return "I am B"; } 
} 

現在,當B :: say();被調用,結果是我說'我是A'。是否有任何技術如何強制它產生我說'我是B'without overriding the say() method(請不要問我爲什麼要這樣做,只要相信我在我的項目中是合理的)

我相信這是可以通過抽象類或接口,但我無法弄清楚如何。如果在PHP中不可能,是否有任何實現此功能的語言(Haskell除外)?

回答

0

say()是一種靜態方法,這種方法屬於類,而不是實例,它不是真正的繼承。如果你想創建你自己的方法,你必須「重寫它」(但它不是重寫)。