2016-05-19 9 views
0

このメソッドがパラメータのインスタンスを返すことを登録するにはどうすればよいですか?オートコンプリートの動的宣言メソッド

だから私はこのような何かを行うことができます:

Class::models()->getModel('newModel')->newModelMethodHere()? 

コードは動作しますが、ないPHPStormでオートコンプリートを。

/** 
    * Returns the object of the model 
    * 
    * @var $this->_models[$model] $model 
    * @param string object $model 
    * @throws Exception 
    * @return object 
    */ 
    public function getModel($model) 
    { 
     if (array_key_exists($model, $this->_models) && class_exists($model) && is_object($this->_models[$model]) 
      && $this->_models[$model] instanceof $model) { 
      if (is_a($this->_models[$model], $model)) { 
       /* @var $this->_models[$model] $model */ 
       return ($this->_models[$model]); 
      } 
     } 
     throw new Exception('Model ' . (string)$model . ' is not registered correctly.'); 
    } 
+1

メタデータが役立つはずです(このような場合のみ)。https://confluence.jetbrains.com/display/PhpStorm/PhpStorm+Advanced+Metadata http://stackoverflow.com/q/17666699/783119 – LazyOne

答えて

0

私は私のコードビットを変更する必要がありましたが、私はこの作業を取得するために管理:

namespace PHPSTORM_META { 
    $STATIC_METHOD_TYPES = array(
     \ClassName::getModel('') => [ 
      "" == "@", 
     ], 
    ); 
} 

PHPStormでの私のプロジェクトのルートに新しい.phpstorm.meta.phpファイルに。

0

コメントブロックを修正する必要があります。リターンは、オブジェクトが返すものを明確にする必要があります。

/** 
* Returns the object of the model 
* ... 
* @return ModelNameClass 
*/ 
+0

Nope。関数は異なるオブジェクトを返すことができます。すべて$モデルパラメータに従います – fatkid

+0

'* @return ModelNameClass | AnotherNameClass | ThirdClass' またはすべてのクラスが実装するインターフェイス。 – TheFallen

+0

' 名前空間PHPSTORM_META { $ STATIC_METHOD_TYPES =配列(クラス名\ ::モデル() - > getModel( '')=> [\ RoutingUri、 "" == "@"、 instanceofは "RoutingUri"] 、 ); } ' これはうまくいくはずです。しかし、3レベルの方法は機能していないようです。 – fatkid

0

メソッドgetModel()は、指定された引数に応じて異なる種類のオブジェクトを返す可能性があります。変数にgetModel()によって返された値を格納し、その種類についてPhpStormを伝えるために@var注釈を使用します:

これは良い習慣ではないですが、あなたはPhpStormは、自動補完のお手伝いをさせるために使用できる簡単なトリックがあります
/** @var newModel $model */ 
$model = Class::models()->getModel('newModel'); 
// Here PhpStorm will be able to help you with its auto-complete 
$model->newModelMethodHere()?