【问题标题】:PHPStorm 9 inspection of class inheritance works unexpectablePHPStorm 9 检查类继承工作出乎意料
【发布时间】: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 中的一个错误,或者它可能是故意的。无论哪种方式,有什么解决方法吗?

【问题讨论】:

    标签: php oop phpstorm


    【解决方案1】:

    应该是这样,在抽象类中显示错误是错误的。

    事实上,public abstract function methodB(); 是多余的,因为抽象类已经从接口“继承”了这个抽象方法,因为它没有实现它。

    唯一的解决方法是使AbstractField 抽象。

    【讨论】:

      猜你喜欢
      • 2014-10-02
      • 2020-04-12
      • 1970-01-01
      • 2019-03-25
      • 1970-01-01
      • 2014-09-11
      • 2013-07-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多