私はBaseHandler
とBaseManager
クラス推奨の方法は
class BaseHandler implements IHandler
{
/**
* @var IManager
*/
protected $manager;
...
public function setManager(IManager $manager)
{
$this->manager = $manager;
}
...
}
すべての作品を管理するために、Symfony2ののサービスを使用しています次のクラス構造
を持っています問題は、私がSpecializedManager
クラスのいくつかのメソッドを使用しようとしたときに、PhpStormの提案がそのメソッドを表示しない場合、に属するメソッドだけです。私のコントローラで例えば
public function indexAction(){
$handler = $this->get('appbundle.handler.specialized_handler');
$items = $this->manager->mySubClassMethod(); // PHPStorm shows warning
...
}
私はこの@var SpecializedHandler $manager
のようなものに変更するために、ハンドラのサブクラスでVAR manager
の注釈を設定する方法がわからない、方法のための別の代替の方法でもないに表示されます提案。
注:基本クラスまたは複数の特殊なサブクラス用に拡張されています。
[this](http://stackoverflow.com/questions/24105260/php-upcasting-object)SOの質問をご覧ください。 –
中間変数( '$ manager = $ this-> manager; $ manager-> mySubClassMethod()')を使う必要があります。別のアプローチ(より良い方法は、PHPDocだけに依存します)は、現在の/親クラスの '$ property'プロパティを' @ property'(PHPDocのそのクラスに配置する必要があります)を使って再宣言することです。これはPHPDoc(とPhpStormの静的解析)では第1レベルのオブジェクト(例えば '$ this'、' $ manager'など)のみヒントとなり、nレベル( '$ this-> manager'など)はできません)。 – LazyOne
また、この '/ return'タグを含むこの/ parentクラスに 'getManager()'メソッドを導入し、あなたのコードで '$ this-> manager'の代わりに使用するような方法もあります。 – LazyOne