2016-09-01 5 views
2

Я пытаюсь решить раздражающую проблему с проверкой кода PhpStorm, когда дело доходит до анонимной функции. Он не видит методы переданного объекта.PHPDoc и методы Анонимные функции

Нижеприведенный фрагмент кода опирается на метод Predis и метод конвейера.

startCacheClient()

инициализирует и возвращает экземпляр predis.

трубопровода()

проверяет, как должно, однако

$ труба набор() и $ на трубе> истекает()

Не удалось проверить и вернуть «Метод» Установить «Не найдено в» и «Метод» Истекает «Не Fou й в»

$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++; 
     } 
    }); 

Как я могу получить PhpStorm через PHPDoc, чтобы понять, что эти методы на самом деле есть и доступны. Код функционирует так, как ожидалось, но уведомление о проверке раздражает.

+0

составляет $ конвейера экземпляра [\ Predis \ Pipeline \ Pipeline] (https: // GitHub .com/NRK/predis/блоб/v1.1/SRC/Трубопроводный/Pipeline.php)? – segFault

+0

Если вам нужно фактическое решение PHPDoc: '/ ** @var \ Predis \ ClientContextInterface $ pipe * /' - поместите такую ​​строку где-нибудь внутри анонимной функции (например, сразу после запуска тела функции - перед тем, как любой из код - перед выражением 'foreach' в исходном коде кода) - * должен * работать (но не на 100% уверен, хотя). – LazyOne

ответ

3

Если $pipe является экземпляром \Predis\Pipeline\Pipeline, то вы можете ввести подсказку в анонимном объявлении функции, как:

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

Вот и все! Почему я не думал об этом, я никогда не узнаю. Спасибо за помощь. Закончено, указывая на интерфейс. Я обновил фрагмент кода, чтобы показать окончательную реализацию. – SeaFuzz

Смежные вопросы