【问题标题】:Why do I get a PHPDoc warning in PhpStorm over this code为什么我在 PhpStorm 中收到关于此代码的 PHPDoc 警告
【发布时间】:2012-04-07 01:29:01
【问题描述】:

我不明白为什么 PhpStorm 会针对这种方法给我以下警告 PHPDoc comment does not match function or method signature

/**
 * Create a new instance of the class
 * @param string $classname Class to instantiate
 * @return object the instance
 * @throw FactoryException If the class is not instantiable
 */
private function newInstance($classname) {
    $reflectionClass = new \ReflectionClass($classname);
    if (! $reflectionClass->isInstantiable()) {
        throw new FactoryException("The class $classname is not instantiable.");
    }
    return new $classname;
}

警告不是很具体,我尝试了几种方法,例如将返回类型更改为“Object”、“mixed”甚至“int”(尝试),但它没有改变。这里有什么问题?

【问题讨论】:

    标签: php warnings phpdoc phpstorm


    【解决方案1】:

    应该是@throws 而不是@throw

    如果您只是在函数或类 var 声明的行上键入 /**,它会自动为您插入一个基础 PHPDoc。这就是我注意到差异的原因。

    【讨论】:

    • 我尝试了@throws,但警告仍然存在(我所做的与您输入/** 时所做的相同,但即使是自动生成的文档块也有警告)。其实我有一个测试版的 PhpStorm 4.0,也许它只是一个错误?
    • Funky,是的,我也在使用 4.0。
    • @Matthieu 1) 绝对应该是 throws 2) 在这方面,当前的 v4 EAP 构建 (116.101) 几乎没有问题(我也有同样的问题)。从我所看到的(基于您的 cmets)来看,该函数位于扩展另一个类或实现接口的类中,并且该函数覆盖了父类/接口中的一个。如果是这样——请为它们比较 PHPDoc 块——即使 1 个字符不同(例如“创建新实例...”与“创建新实例...”)PhpStorm 也会报告此类错误。
    • 新的 EAP 版本应该在今天晚些时候或明天推出......但我不希望这会在那里得到解决(至少基于相关的工单状态)。
    • 好的,那我会处理一个错误,即使这个方法没有覆盖,也就是这个类的另一种方法(实现接口)的 cas。
    【解决方案2】:

    如果此方法碰巧从存在 docblock 的父类实现/覆盖,请查看您的标签是否在两者之间匹配。通常,父级中的标签将由子级继承,这样如果父级的方法 docblock 已经具有相同的标签(param、return、throws),则无需在子级的 docblock 中列出它们,除非它们特别需要说一些不同于父母的话。

    【讨论】:

    • 这可能是,但它是一个私有方法;),这里没有覆盖
    【解决方案3】:

    请参考此链接 https://blog.jetbrains.com/webide/2011/05/phpdoc-inspections/ 那里提到“如果 PHPDoc 注释中描述的多个参数和/或其类型与相应的函数或方法声明不匹配,则检查报告问题”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 1970-01-01
      • 2012-07-27
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      • 1970-01-01
      相关资源
      最近更新 更多