2014-01-08 73 views
2

使用Behat子上下文類我需要從主要上下文中調用一個方法,例如, $this->getMainContext()->fooBar()。 PhpStorm相當合理地警告說,fooBar()不存在,因爲它期望getMainContext()返回ExtendedContextInterface,而不是我具體的FeatureContextPhpStorm:繼承方法返回類型的註解?

有沒有辦法註釋我的子類,告訴PhpStorm getMainContext()實際返回我的具體類?

一個解決方案是覆蓋getMainContext()只是爲了讓我有一個方法來添加我自己的PHPDoc,因此指定了不同的返回類型,但添加一個方法只是爲了在IDE中獲得更好的代碼感是可怕的。

順便說一句,我知道這是有點hacky,理論上我的子上下文不應取決於我的主要背景具體具體實施;實際上,雖然Behat並沒有那麼實際。

回答

6

使用該類標準@method註釋的工作原理:

/** 
    * @method FeatureContext getMainContext() 
    */ 
class SubContext extends BehatContext 
{ 
    public function foo() 
    { 
      $this->getMainContext()->bar(); 
    } 
} 
+1

在有人需要它這裏的情況是規範http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_tags。 method.pkg.html – Alrik

+0

我有幾乎相同的問題,除了不是一個方法,而是一個類變量,但我不認爲有一個解決方案。我的類(本身派生自一個基類)爲基類成員分配一個類型,它是基類中定義類型的子類,我不知道如何告訴IDE。 – AndyClaw

+0

@AndyClaw肯定你不需要?如果你正在分配的對象擴展了基類指定的類型,那麼它的公共API應該與該基類型相同,否? –