PHPDoc 和方法匿名函数

标签 php phpstorm predis

我正在尝试解决 PhpStorm 的代码验证在匿名函数方面的一个恼人的问题。它看不到传递的对象的方法。

下面的代码片段依赖于 Predis 和 pipeline 方法。

startCacheClient()

实例化并返回 predis 的实例。

pipeline()

然而,它应该被验证

$pipe-set() and $pipe->expire()

验证失败并返回“找不到方法‘Set’”和“找不到方法‘Expire’”

    $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 以了解这些方法实际上存在且可用。代码按预期运行,但验证通知很烦人。

最佳答案

如果 $pipe\Predis\Pipeline\Pipeline 的实例,那么您可以在匿名函数声明中键入提示,例如:

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

关于PHPDoc 和方法匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39261357/

相关文章:

php - 如何在 Predis 中使用 SCAN 和 MATCH 选项

redis超时与predis

php - 第一份工作日期的 MySQL 查询

php - 如何将 php 变量插入 javascript 对象/数组

php - 当一周跨越两年时从 PHP date() 获取一年中的一年和一周

mysql - DataGrip/PhpStorm 未连接到 MySQL DB,错误 : com. intellij.execution.ExecutionException

ide - 在 phpstorm 中重新格式化代码时如何停止换行?

PHP Doc - 如何指定确切的抽象类型?

php - mySQL 查询 - 如何?

php - 高流量站点的 Predis 超时