【发布时间】:2015-11-21 13:59:53
【问题描述】:
我在 PHPStorm 9 中遇到以下问题:
假设我有一个接口FieldInterface,它有一些方法:
namespace Acme;
interface FieldInterface {
public function methodA();
public function methodB();
}
然后我有一个实现接口的基本功能的抽象类。该抽象类让用户实现某些方法,假设在我们的示例中它是methodB:
namespace Acme;
abstract class AbstractField implements FieldInterface {
public function methodA() {
// implement methodA
}
public abstract function methodB(); // have the user implement it
}
最后我有一些现成的类StringField:
namespace Acme;
class StringField extends AbstractField {
public function methodB() {
// implement methodB
}
}
此时一切顺利。但是如果我在FieldInterface 中添加新方法,PHPStorm 不会说AbstractField 有任何问题,而很明显我应该在其中添加public abstract function newMethod();。但是,它会在 StringField 类中发现错误。
可以理解为抽象类是为了扩展而做的,但通常你扩展抽象类而不是实现底层接口。制作抽象类的全部意义是节省用户实现接口的时间。那么为什么 PHPStorm 强迫我在具体类中实现接口,而不是强迫我在明确实现接口的抽象类中实现它。
所以我想知道这是否是 PHPStorm 中的一个错误,或者它可能是故意的。无论哪种方式,有什么解决方法吗?
【问题讨论】: