PHPStorm:由include/require引起的未定义变量

kxc*_*kxc 11 php variables undefined require phpstorm

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

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

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

PHPStorm可以理解在包含/需要的文件中设置哪些变量,哪些不是?

And*_*wis 18

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

取消选中Settings/Editor/Inspections/PHP/Undefined变量中的单选按钮,名为"忽略'包含'和'require'语句".

在此输入图像描述

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

require $path; // $some_variable is defined in that file
/** @noinspection PhpUndefinedVariableInspection */
$config["DBSettings"] = [
    "server" => $some_variable
];
Run Code Online (Sandbox Code Playgroud)


小智 11

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

在此处输入图片说明

  • 启用此设置可能会导致 PHPStorm 产生误解。例如:我有一个 `header.php` 声明了一个 `$name = 'user';`。如果我需要或在“index.php”中包含头文件,IDE 会指向甚至未包含在当前脚本中的文件的另一个“$name”(同一项目的另一个文件)。使用 PHPDoc 可以解决这个问题。 (3认同)
  • 这就是解决方案。 (2认同)

hak*_*kre 9

是的.但是,这应该暗示你的代码最有可能出现的另一个问题(以及哪些Phpstorm不能特别警告):除了你如何使用include和使用全局变量之外,还要过多地使用全局变量require.

您可以通过更多地模块化代码来轻松改进,例如通过使用带参数的函数.另外,您可以考虑(但不需要在PHP中)开始使用对象编写类和程序.

对于PHPStorm本身,您可以使用注释排除单个或多个语句,以在某些位置禁用警告.但是,如果你有很多"误报",这很麻烦.这顺便说一下.适用于任何检查警告.

另见:


小智 5

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

最佳解决方案是使用带有已使用变量的doc块添加标头。

例:

<?php
/**
 * @var string $name
 * @var FormData $form
 */
?>
Run Code Online (Sandbox Code Playgroud)

这不仅会阻止显示“未定义的变量”警告,而且还会记录您的代码并使自动完成工作按预期进行。