【问题标题】:PHP: Variable function name (function pointer) called ; How to tell IDE my function is called?PHP:调用的变量函数名(函数指针);如何告诉 IDE 我的函数被调用?
【发布时间】:2014-11-06 22:31:19
【问题描述】:

我目前正在尝试删除 PHPStorm 中的检查工具给我的项目中的所有错误和警告。

我遇到一个 sn-p PHPStorm 说“未使用的私有方法 _xxx”,而它实际上被使用了,但是是以动态的方式。这是一个简化的 sn-p:

<?php
class A
{
    private function _iAmUsed()
    {
        //Do Stuff...
    }

    public function run($whoAreYou)
    {
        $methodName = '_iAm' . $whoAreYou;
        if (method_exists($this, $methodName)) {
            $this->$methodName();
        }
    }
}

$a = new A();
$a->run('Used');
?>

在这个 sn-p 中,PHPStorm 会告诉我“未使用的私有方法 _iAmUsed”,而事实上,它已被使用... 我怎样才能通过添加 PHPDocs 或其他东西,让我的 IDE 了解我的方法实际被使用?

请注意,我给我的“运行”调用一个静态字符串,但我们也可以这样想象:

<?php
$a->run($_POST['whoYouAre']); //$_POST['whoYouAre'] == 'Used'
?>

非常感谢!

【问题讨论】:

  • 仅供参考,IDE 警告只是为了让您知道可能有问题。删除所有这些(无论如何都是任意的)并不是一个真正可行的目标。
  • 是的,您不应该过多地迎合 IDE 的表面分析(在 PHPStorm 中,它实际上既不是静态代码检查,也不是为 PHP 的动态特性提供太多支持)。如果您已经验证它按预期工作,只需在报告中应用“忽略此实例”即可。
  • 删除此类警告的“愚蠢”方法之一(由于您的动态使用)将该方法标记为protected 而不是private。 PhpStorm(以及这里的任何其他 PHP IDE)仅使用静态(和接近静态)代码检查(如上所述)无法检测到如此高度动态的使用情况

标签: php phpstorm phpdoc variable-names


【解决方案1】:

将phpdoc中使用的方法标记为@used 例子

/**
* @uses  _iAmUsed()
* @param string $whoAreYou
*/ 
public function run($whoAreYou)
{
    $methodName = '_iAm' . $whoAreYou;
    if (method_exists($this, $methodName)) {
        $this->$methodName();
    }
}

【讨论】:

  • 这比“noinspection”标签好很多。非常感谢。
  • 为了提供更多关于此的信息,还有标签“used-by”可以帮助参考使用情况。同时使用“uses”和“used-by”标签可以实现快速导航和参考。
  • @niconoe 我似乎无法找到这个“被使用”注释的任何引用(至少对于 PHPStorm)。你能提供更多信息吗?
  • 看起来@used-by 并不是真正要手动添加的标签。它是提到here 的自动生成标签,目的是在生成文档时提供双向引用。事实上,一旦一个方法指向另一个方法,我们也可以判断哪些其他方法指向那个方法。参见例如“查找用法”命令工作正常。如果您仍然想在 PHPStorm 中添加一种在另一个方向上轻松导航文档的方法,请尝试使用 @see 标签从“已使用”引用回“用户”。
【解决方案2】:

在方法上方添加noinspection注解:

/** @noinspection PhpUnusedPrivateMethodInspection */
private function _iAmUsed()
{
    //Do Stuff...
}

或者在运行代码分析之后,您可以右键单击结果窗口中的任何检查并选择 Suppress for statement 以让 PHPStorm 自己添加正确的注释。欲了解更多信息,请参阅http://www.jetbrains.com/phpstorm/webhelp/suppressing-inspections.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-06
    • 2012-12-16
    • 2019-01-25
    • 2015-04-21
    • 2021-12-21
    • 2016-02-11
    • 2012-05-28
    相关资源
    最近更新 更多