2016-07-23 9 views
1

私はBaseHandlerBaseManagerクラス推奨の方法は

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

    ... 

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

すべての作品を管理するために、Symfony2ののサービスを使用しています次のクラス構造

Class Structure

を持っています問題は、私がSpecializedManagerクラスのいくつかのメソッドを使用しようとしたときに、PhpStormの提案がそのメソッドを表示しない場合、に属するメソッドだけです。私のコントローラで例えば

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

私はこの@var SpecializedHandler $managerのようなものに変更するために、ハンドラのサブクラスでVAR managerの注釈を設定する方法がわからない、方法のための別の代替の方法でもないに表示されます提案。

注:基本クラスまたは複数の特殊なサブクラス用に拡張されています。

+0

[this](http://stackoverflow.com/questions/24105260/php-upcasting-object)SOの質問をご覧ください。 –

+1

中間変数( '$ manager = $ this-> manager; $ manager-> mySubClassMethod()')を使う必要があります。別のアプローチ(より良い方法は、PHPDocだけに依存します)は、現在の/親クラスの '$ property'プロパティを' @ property'(PHPDocのそのクラスに配置する必要があります)を使って再宣言することです。これはPHPDoc(とPhpStormの静的解析)では第1レベルのオブジェクト(例えば '$ this'、' $ manager'など)のみヒントとなり、nレベル( '$ this-> manager'など)はできません)。 – LazyOne

+1

また、この '/ return'タグを含むこの/ parentクラスに 'getManager()'メソッドを導入し、あなたのコードで '$ this-> manager'の代わりに使用するような方法もあります。 – LazyOne

答えて

0

あなたがPHPStormを使用しているとして、あなたはPHPStormためSymfony2のプラグインをインストールすることがあります。このプラグインをインストールしてhttps://plugins.jetbrains.com/plugin/7219?pr=phpStorm

(およびプロジェクトで有効になって)、あなたは自動的にサービスに完全な自動補完を持っている必要があります。