2016-07-23 41 views
1

我有下面的類結構建議的方法PhpStorm失去當一個子類實現

Class Structure

我使用Symfony2中的服務管理BaseHandlerBaseManager

class BaseHandler implements IHandler 
{ 
    /** 
    * @var IManager 
    */ 
    protected $manager; 

    ... 

    public function setManager(IManager $manager) 
    { 
     $this->manager = $manager; 
    } 
    ... 
} 

所有作品沒問題,但問題是當我嘗試使用SpecializedManager類的某些方法並且PhpStorm的建議未顯示其方法時,只有屬於的方法。

例如在我的控制器

public function indexAction(){ 
    $handler = $this->get('appbundle.handler.specialized_handler'); 
    $items = $this->manager->mySubClassMethod(); // PHPStorm shows warning 
    ... 
} 

我不知道如何處理程序子類設置VAR manager的註解來改變這樣的事情@var SpecializedHandler $manager,既不是方法的另一種替代的方式出現在建議。

注意:基類或擴展爲多個專用子類。

+0

看看[this](http://stackoverflow.com/questions/24105260/php-upcasting-object)SO問題。 –

+1

您可能需要使用中間變量('$ manager = $ this-> manager; $ manager-> mySubClassMethod()'),您可以按照您的建議通過內嵌的'@ var'鍵入內容。另一種方法(更好的方法,因爲它僅依賴於PHPDoc)是通過「@ property」重新聲明當前/父類中的$ manager屬性(必須位於該類的PHPDoc中)。所有這些都是因爲在PHPDoc(和PhpStorm的靜態分析)中,你只能鍵入提示只有第一級對象(例如'$ this','$ manager'等)並且不能執行n級('$ this-> manager'等) )。 – LazyOne

+1

還有其他一些方法,例如:在這個/父類中引入'getManager()'方法,它將包含正確的'@ return'標記,並在代碼中使用它代替'$ this-> manager'。 – LazyOne

回答

相關問題