【问题标题】:PHPStorm: undefined variables caused by include/requirePHPStorm:由include/require引起的未定义变量
【发布时间】:2014-04-23 23:32:56
【问题描述】:

PHPStorm 显示来自其他文件的所有变量,无论是必需的还是包含的,都是未定义的。我找到了这个解决方案here,但是在我禁用该选项Ignore 'include' and 'require' statements 之后,IDE 忽略了所有未定义的变量。

例如,我有一个内容为$name = 'Bob' 的文件a.php 和一个文件b.php,这需要文件a.php。当我在文件b.php 中键入echo $name 时,它按预期工作并显示'Bob'。但是,IDE 会突出显示变量$name,声称它是未定义的。如果我禁用该选项'Undefined variable' - Ignore 'include' and 'require' statements,IDE 将停止突出显示它。

使用该选项,我现在可以在文件b.php 中写入任何变量,例如$sdadasdasdas,并且IDE 不会突出显示它。

PHPStorm 可以理解哪些变量设置在包含/必需的文件中,哪些没有设置?

【问题讨论】:

标签: php variables undefined require phpstorm


【解决方案1】:

以上所有答案都删除或抑制了恕我直言不是好的解决方案的警告。

最好的解决方案是添加带有已使用变量的文档块的标题。

例子:

<?php
/**
 * @var string $name
 * @var FormData $form
 */
?>

这不仅可以防止显示“未定义变量”警告,还可以记录您的代码并使自动完成功能按预期工作。

【讨论】:

  • 是的!你是对的!我喜欢这个解决方案,因为不要修改我的共享存储库中的代码库,我的意思是带有其他程序员无关紧要的其他注释的代码。
  • @Pawel Hawro 这对我有用。我很沮丧,因为我在 init.php 中实例化了一个对象,然后includeed init.php 在 login.php 中,在我的 login.php 中,我实例化的对象/类是错误的。但是按照您的解释添加文档块会阻止显示错误。 (我同意抑制错误不是要走的路)
  • 很好,同时 PhPStorm 将帮助您进行 lint 反馈和自动完成
【解决方案2】:

正如 hakre 所指出的,这个警告可能是代码味道不好的迹象。但是,如果之前有 includerequire 调用,您可以禁用 PHPStorm 对未定义变量的检查。

取消选中 Settings/Editor/Inspections/PHP/Undefined 变量中名为“忽略 'include' 和 'require' 语句”的单选按钮。

如果您不想禁用此检查,可以使用 PHPStorm 的 @noinspection annotation单个语句 禁用它。示例代码:

require $path; // $some_variable is defined in that file
/** @noinspection PhpUndefinedVariableInspection */
$config["DBSettings"] = [
    "server" => $some_variable
];

【讨论】:

    【解决方案3】:

    启用“在当前文件之外搜索变量的定义”

    【讨论】:

      【解决方案4】:

      是的。但是,这应该暗示您的代码最有可能存在的另一个问题(Phpstorm 无法具体警告):除了您如何使用 includerequire 之外,您还过多地利用了全局变量的使用。

      您可以通过更多模块化代码来轻松改进这里,例如由making use of functions 带参数。此外,您可以考虑(但您不需要在 PHP 中)开始使用对象编写类和程序。

      对于 PHPStorm 本身,您可以排除单个或多个带有注释的语句,以在某些地方禁用警告。但是,如果您有很多“误报”,这很麻烦。这个顺便说一句。适用于任何检查警告。

      参见:

      【讨论】:

      • 那么解决这个问题的实际正确方法是什么?函数似乎在这方面根本没有帮助。
      • @FrankyBoy:请看后续回答stackoverflow.com/a/35147818/367456,它展示了如何更专注地控制 Phpstorm 中的检查警告。元文件也可能有帮助或 \@var 定义。也许也定义为全局变量。
      • 这两个对我来说似乎都是解决方法,只是摆脱讨厌的警告,而不解决实际的潜在问题/反模式。我问的是反模式的替代方案,而不是如何忽略警告。
      • @FrankyBoy 请多描述一下你的情况下的反模式是什么,然后我可能会在这个方向上提出建议。如果不了解更多上下文,很难提出建议。
      【解决方案5】:

      通过不仅在我的函数顶部使用global $db,而且还在其他文件顶部使用,phpstorm 以某种方式找出了在哪里可以找到该变量的声明和/** @var 语句。

      【讨论】:

        【解决方案6】:

        就个人而言,我只是降低警告的严重性,然后无论您是否有先前的 include/require 语句,该警告都将适用。 Settings>>Editor>>Inspections>>PHP>>Undefined>>[highlight 'Undefined variable'],然后使用下拉菜单调整'Severity'。

        【讨论】:

          猜你喜欢
          • 2019-03-22
          • 1970-01-01
          • 2014-12-27
          • 2012-01-18
          • 2014-06-26
          • 1970-01-01
          • 2015-10-25
          • 2012-07-29
          • 2011-10-30
          相关资源
          最近更新 更多