2010-08-23 21 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()是一种静态方法,这种方法属于类,而不是实例,它不是真正的继承。如果你想创建你自己的方法,你必须“重写它”(但它不是重写)。