Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可能未定义phpstorm警告php变量_Php_Phpstorm - Fatal编程技术网

可能未定义phpstorm警告php变量

可能未定义phpstorm警告php变量,php,phpstorm,Php,Phpstorm,PHPSTORM为每个文件提供一个标志:红色-错误、黄色-警告、绿色-确定 标题上方的PHP将为$smith分配一个值。在正文中,我收到$smith的警告,说它可能未定义。如果我在PHP代码的顶部声明所有变量,($smith=“”;),它会很高兴(没有警告) 我应该做些什么来防止这些警告 我不喜欢把评论贴在每个评论上,说不要检查,我也不想把它们都关掉 当我包含定义四个或五个变量的db_login.php文件时,经常会发生这种情况。我有不同的db_login.php文件用于WAMP、MAMP和真实

PHPSTORM为每个文件提供一个标志:红色-错误、黄色-警告、绿色-确定

标题上方的PHP将为$smith分配一个值。在正文中,我收到$smith的警告,说它可能未定义。如果我在PHP代码的顶部声明所有变量,($smith=“”;),它会很高兴(没有警告)

我应该做些什么来防止这些警告

我不喜欢把评论贴在每个评论上,说不要检查,我也不想把它们都关掉

当我包含定义四个或五个变量的db_login.php文件时,经常会发生这种情况。我有不同的db_login.php文件用于WAMP、MAMP和真实的hose


有什么想法吗?

是的,你可以做两件事来摆脱这个警告。你说的:

<?php
//  $smith = "";
  $submit ="button_a";

  if($submit == "button_a") {
      $smith = "button_a";
  }
    elseif($submit == "button_b"){
      $smith = "button_b";
  }
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>

<p>
    <?php echo($smith);  ?>
</p>

</body>
</html>
或者在打印时检查是否已设置:

$smith = "";
if($submit == "button_a") {
    $smith = "button_a";
}
elseif($submit == "button_b"){
    $smith = "button_b";
}


然而,这只是一个警告,它让您知道有一个条件,
$smith
将不会被定义(当
$submit
不是
“按钮a”
并且不是
“按钮b”
)。如果出现这种情况,您将在未设置时打印
$smith
,这可能是脚本中的一个错误。

如果require on include语句位于变量访问之前的同一执行流中,您可以告诉PHPStorm忽略未定义的变量报告。您可以在“Undefined variable”-Ignore“include”和“require”语句中找到它。默认情况下,它处于启用状态,因此您应该禁用它


注意:设置在
文件>设置(Ctrl+Alt+S)>项目设置>检查>PHP>未定义>未定义变量中

PHPSTORM比我想象的要聪明。如果我将elseif更改为else,以便通过代码的所有路径都指定一个值,那么它会很高兴。我的db_登录包含文件如何定义数据库、用户、密码、表等。有没有办法让它“查看”包含文件,这样我就不必预先定义它们了?因为这样就不存在不定义
$smith
的条件。它实际上很有用(IMO),因为它告诉您存在一个条件,您将访问一个尚未定义的变量。只有在执行带有“bug”条件的脚本时(即
$submit
不是
按钮a
按钮b
),才能从PHP获得此信息。关于包含文件的问题,请参阅下面Dreen的答案。我完全建议您在使用任何变量之前始终声明/初始化变量。。。使调试变得更容易。。。。不要在设置中使用全局变量(例如db详细信息等--静态类以获取帮助)--如果是您自己的代码,当然:)这些设置在哪里?文件>设置(Ctrl+Alt+s)>项目设置>检查>PHP>未定义>未定义变量谢谢Kobra@德伦:请更新答案,因为截图确实缺乏背景。
<?php 
    if( isset( $smith)) {
        echo($smith); 
    } 
?>