提问人:kxc 提问时间:3/18/2014 最后编辑:Communitykxc 更新时间:11/28/2020 访问量:28440
PHPStorm:由 include/require 引起的未定义变量
PHPStorm: undefined variables caused by include/require
问:
PHPStorm 显示其他文件中的所有变量,包括必需的和包含的,都是未定义的。我在这里找到了这个解决方案,但是在我禁用该选项后,IDE忽略了所有未定义的变量。Ignore 'include' and 'require' statements
例如,我有一个包含内容的文件,以及需要文件的文件。当我输入文件时,它按预期工作并显示。但是,IDE 会突出显示声称该变量未定义。如果禁用该选项,IDE 将停止突出显示它。a.php
$name = 'Bob'
b.php
a.php
echo $name
b.php
'Bob'
$name
'Undefined variable' - Ignore 'include' and 'require' statements
使用该选项,我现在可以编写任何变量,例如在文件中,并且 IDE 不会突出显示它。$sdadasdasdas
b.php
PHPStorm 可以理解哪些变量是在包含/必需的文件中设置的,哪些不是?
答:
是的,它是。但是,这应该提示您代码最有可能遇到的另一个问题(并且 Phpstorm 无法特别警告):除了如何使用 和 之外,您还过多地利用了全局变量的使用。include
require
您可以通过进一步模块化代码来轻松改进,例如使用带有参数的函数。此外,您可以考虑(但在 PHP 中不需要)开始使用对象编写类和程序。
对于 PHPStorm 本身,您可以排除带有注释的单个或多个语句,以在某些地方禁用警告。但是,如果您有很多“误报”,那就很麻烦了。顺便说一句。适用于任何检查警告。
另请参阅:
评论
正如 hakre 所指出的,这个警告可能是代码异味的迹象。但是,如果存在先前的 include
或 require
调用,您可以禁用 PHPStorm 对未定义变量的检查。
取消选中 Settings/Editor/Inspections/PHP/Undefined 变量中名为“忽略'include'和'require'语句”的单选按钮。
如果你不想禁用这个检查,你可以通过使用 PHPStorm 的 @noinspection 注解来禁用它。示例代码:
require $path; // $some_variable is defined in that file
/** @noinspection PhpUndefinedVariableInspection */
$config["DBSettings"] = [
"server" => $some_variable
];
通过不仅在我的函数顶部使用,而且在其他文件之上使用,phpstorm 以某种方式找出在哪里可以找到该 var 的声明和语句。global $db
/** @var
就个人而言,我只会降低警告的严重性,无论您是否有先前的 include/require 语句,它都会适用。设置>>编辑器>>检查>>PHP>>未定义>>[突出显示'未定义变量'],然后使用下拉菜单调整“严重性”。
以上所有答案都删除或禁止警告,恕我直言,这不是好的解决方案。
最好的解决方案是添加带有已使用变量的文档块的标题。
例:
<?php
/**
* @var string $name
* @var FormData $form
*/
?>
这不仅可以防止显示“未定义的变量”警告,还可以记录您的代码并使自动完成按预期工作。
评论
include
启用“在当前文件之外搜索变量的定义”
评论
header.php
$name = 'user';
index.php
$name
评论