phpstorm警告php变量可能尚未定义

时间:2012-08-01 01:21:16

标签: php phpstorm

<?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>

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

标题上方的PHP将为$ smith分配一个值。在身体里,我得到了一个关于$史密斯的警告说它可能是未定义的。如果我在PHP代码的顶部声明所有变量,($ smith =“”;)它很高兴(没有警告)。

我是否应该采取措施防止这些警告?

我不喜欢将评论附加到每个人说不检查它的想法,我不想把它们全部关掉。

当我包含定义四个或五个变量的db_login.php文件时,会发生很多这种情况。我为WAMP,MAMP和真正的软管提供了不同的db_login.php文件。

有什么想法吗?

2 个答案:

答案 0 :(得分:15)

如果在变量访问之前,require on include语句位于同一个执行流程中,您可以告诉PHPStorm忽略未定义的变量报告。你会在'Undefined variable'中找到它 - 忽略'include'和'require'语句。它默认启用,因此您应该禁用它。

enter image description here

注意:该设置位于File > Settings (Ctrl+Alt+S) > Project Settings > Inspections > PHP > Undefined > Undefined variable

答案 1 :(得分:6)

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

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

或者在打印时检查它是否已设置:

<?php 
    if( isset( $smith)) {
        echo($smith); 
    } 
?>

但是,这只是一个警告,它让您知道有一个条件$smith将无法定义(当$submit不是"button_a"且不是{ 't "button_b")。如果发生这种情况,您将在未设置时打印$smith,这可能是您脚本中的错误。