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可以理解在包含/需要的文件中设置哪些变量,哪些不是?
正如hakre指出的那样,这个警告可能是代码味道不好的迹象。但是,如果存在先前的include
或require
调用,则可以禁用PHPStorm对未定义变量的检查。
取消选中Settings / Editor / Inspections / PHP / Undefined变量中的单选按钮,名为“忽略'包含'和'require'语句”。
如果您不想禁用此检查,可以使用PHPStorm的@noinspection annotation为单个语句禁用它。示例代码:
require $path; // $some_variable is defined in that file
/** @noinspection PhpUndefinedVariableInspection */
$config["DBSettings"] = [
"server" => $some_variable
];
是的。但是,这应该暗示你的代码最有可能出现的另一个问题(以及Phpstorm无法特别警告的问题):除了如何使用include
和require
之外,你还过度使用了全局变量。
您可以通过更多地模块化代码来轻松改进,例如:由making use of functions参数。另外,您可以考虑(但不需要在PHP中)开始使用对象编写类和程序。
对于PHPStorm本身,您可以使用注释排除单个或多个语句,以在某些位置禁用警告。但是,如果你有很多“误报”,这很麻烦。这顺便说一下。适用于任何检查警告。
另见:
通过使用global $db
不仅在我的函数的顶部,而且在其他文件的顶部,phpstorm以某种方式找出在哪里找到声明和该var的/** @var
语句。
就个人而言,我只是降低警告的严重程度,无论您是否有先前的包含/要求声明,都会适用。设置>>编辑>>检查>> PHP >>未定义>> [突出显示'未定义变量'],然后使用下拉菜单调整'严重性'。
以上所有答案都会删除或禁止警告,这些警告不是很好的解决办法。
最佳解决方案是使用带有已使用变量的doc块添加标头。
例:
<?php
/**
* @var string $name
* @var FormData $form
*/
?>
这不仅会阻止显示“未定义变量”警告,还会记录您的代码并使自动完成按预期工作。