2016-09-01 31 views
2

匿名関数に関してPhpStormのコード検証で厄介な問題を解決しようとしています。渡されたオブジェクトのメソッドは表示されません。PHPDocとメソッド匿名関数

以下のコードスニペットは、Predisとパイプラインメソッドに依存しています。

startCacheClient()

インスタンス化とpredisのインスタンスを返します。

パイプライン()

しかし

$パイプセット()と$パイプ - 、それが必要として検証>(有効期限切れ)

"Method 'Set' Not Found 'および" Method' Expire 'Not Fouを検証して返します。 ND

$this->i = 0; 
    $this->startCacheClient()->pipeline(function($pipe) use($values, $jsonEncode, $keepAlive){ 

     foreach($values as $key => $currentValue){ 

      if($jsonEncode) { 
       $currentValue = gzcompress(json_encode($currentValue), -1); 
      } 

      $pipe->set($key, $currentValue); 
      $pipe->expire($key, $keepAlive); 

      $this->i++; 
     } 
    }); 

「にどのように私はこれらのメソッドは、実際に存在し、利用可能であることを理解してたPHPDocを通じてPhpStormを得ることができます。コードは期待どおり機能しますが、検証の告知は面倒です。

+0

は[\ Predis \パイプ\パイプライン](HTTPSのインスタンス$パイプです.com/nrk/predis/blob/v1.1/src/Pipeline/Pipeline.php)? – segFault

+0

実際のPHPDocソリューションが必要な場合は、 '/ ** @var \ Predis \ ClientContextInterface $ pipe * /' - そのような行を匿名関数のどこかに置きます(例えば、関数本体の開始直後 - コード - 元のコードサンプルの 'foreach'文の前に) - *はすべきです(100%ではありません)。 – LazyOne

答えて

3

$pipe\Predis\Pipeline\Pipelineのインスタンスである場合、あなたは次のように無名関数宣言内のヒントを入力できます。// githubの:

$this->startCacheClient()->pipeline(function(\Predis\ClientContextInterface $pipe) use($values, $jsonEncode, $keepAlive){ 
    /* DO STUFF HERE */ 
}); 
+2

それでした!なぜ私はそれについて考えなかったのですか、私は決して知らないでしょう。助けてくれてありがとう。インターフェースを指し示すようになった。最終的な実装を示すためにコードスニペットを更新しました。 – SeaFuzz