PhpStorm: 继承方法返回类型的注释?

4
使用Behat子上下文类,我需要调用主要上下文的方法,例如$this->getMainContext()->fooBar()。PhpStorm合理地警告我说fooBar()不存在,因为它期望getMainContext()返回一个ExtendedContextInterface,而不是我的具体FeatureContext
有没有一种方法来注释我的子类以告诉PhpStorm getMainContext()实际上返回我的具体类?
其中一种解决方案是覆盖getMainContext(),只需添加自己的PHPDoc即可指定不同的返回类型,但仅为了在IDE中获得更好的代码感觉而添加方法是可怕的。
顺便说一句,我知道这有点像hacky,并且理论上我的子上下文不应取决于我的主上下文具有特定的具体实现;但实际上,Behat并不实用。
1个回答

8
使用类的标准@method注释是有效的:
 /**
  * @method FeatureContext getMainContext()
  */
 class SubContext extends BehatContext
 {
     public function foo()
     {
          $this->getMainContext()->bar();
     }
 }

2
如果有人需要,这里是规范 http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_tags.method.pkg.html - Alrik
我有一个几乎相同的问题,只不过不是方法而是类变量,但我认为没有解决方案。我的类(本身派生自基类)将一个基类成员分配给一个基类中定义的子类类型,并且我无法弄清楚如何告诉IDE。 - AndyClaw
@AndyClaw 当然不需要吧?如果你分配的对象扩展了基类指定的类型,那么它的公共API应该与基本类型相同,不是吗? - Richard Turner
找到解决方案了!您可以在类定义上方使用“魔法属性”。看起来像是“@property”。@RichardTurner 子类通常具有在父类中未定义的新函数。子类更像是基类的扩展,而不仅仅是实现。 - AndyClaw

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接