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

时间:2014-03-18 10:36:41

标签: php variables undefined require phpstorm

PHPStorm显示来自其他文件的所有变量(包括必需和包含的)都是未定义的。我找到了此解决方案here,但在禁用该选项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可以了解在包含/需要的文件中设置了哪些变量,哪些变量没有?

6 个答案:

答案 0 :(得分:16)

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

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

enter image description here

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

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

答案 1 :(得分:9)

是的。但是,这应该暗示你的代码最有可能存在的另一个问题(以及哪些Phpstorm不能特别警告):除了使用include和{{1}之外,你还过度使用了全局变量}。

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

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

参见:

答案 2 :(得分:2)

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

答案 3 :(得分:2)

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

enter image description here

答案 4 :(得分:1)

就我个人而言,我只是降低警告的严重性,无论您是否具有事先的include / require语句,警告都将适用。设置>>编辑器>>检查>> PHP >>未定义>> [突出显示“未定义变量”],然后使用下拉菜单调整“严重性”。

答案 5 :(得分:0)

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

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

示例:

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

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