PHP中的一般继承(不仅仅是)

时间:2010-08-23 20:05:52

标签: php oop

我们有这个班级

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除外)实现此功能?

2 个答案:

答案 0 :(得分:1)

自PHP 5.3 后期静态绑定可用。你应该看一下。

http://php.net/manual/en/language.oop5.late-static-bindings.php

答案 1 :(得分:0)

say()是一个静态方法,这种方法属于类,不属于实例,它不是真正继承的。如果你想创建自己的方法,你必须“覆盖它”(但同样它不会覆盖)。