【发布时间】:2014-01-16 08:53:34
【问题描述】:
我有一些带有 foo 方法的抽象类 MyClass。当有人从此类继承并覆盖此方法时,从子类调用此方法很重要。所以我想在这种情况发生时发出警告。但是我不能修改子类,因为它不是我设计的。另外 foo 方法可以被覆盖但不是必须的。
在代码中,调用FirstClass::foo() 应该会导致警告,但SecondClass::foo() 不会。我该怎么做?
abstract class MyClass {
public function foo() {
// do something important
}
}
class FirstClass extends MyClass {
public function foo() {
// do something special
}
}
class SecondClass extends MyClass {
public function foo() {
parent::foo ();
// do something special
}
}
【问题讨论】:
-
请显示警告信息,因为您当前的代码是正确的。
-
这不是一种反模式,需要重写父方法吗? en.wikipedia.org/wiki/Call_super
-
按常识 - 不。因为您无法从外部范围预测内部方法中发生的事情。如果是 您 设计您的子课程 - 那么为什么不添加直接检查呢?如果不是你 - 那么你应该添加一些有问题的限制
-
我个人会为此使用接口。如果不应该调用来自
FirstClass的foo,它不应该在类中。而SecondClass可以实现需要这个方法的接口。
标签: php inheritance overriding