php声称我定义的变量未定义

时间:2010-03-20 00:36:43

标签: php variables undefined

我的php有点生疏,但现在这让我很难过。我搜索了这个并阅读了所有看起来相关的stackoverflow问题,但那些似乎都有合法的未定义变量。这让我相信我的问题是同样的问题,但没有多少盯着简单的代码我已经减少了这个似乎让我无处可去。请有人给我我的傻瓜帽并告诉我我做错了什么!

<?php
//test for damn undefined variable error

$msgs = "";

function add_msg($msg){
  $msgs .= "<div>$msg</div>";
}
function print_msgs(){
  print $msgs;
}

add_msg("test");
add_msg("test2");
print_msgs();
?>

这给了我以下令人抓狂的输出:

  

注意:未定义的变量:第7行的C:\ wamp \ www \ fgwl \ php-lib \ fgwlshared.php中的消息

     

注意:未定义的变量:第7行的C:\ wamp \ www \ fgwl \ php-lib \ fgwlshared.php中的消息

     

注意:未定义的变量:第10行的C:\ wamp \ www \ fgwl \ php-lib \ fgwlshared.php中的消息

是的,这应该是一个共享文件,但目前我已将其剥离到我粘贴的内容。有什么想法吗?

4 个答案:

答案 0 :(得分:13)

<?php
$msgs = "";

function add_msg($msg){
  global $msgs;
  $msgs .= "<div>$msg</div>";
}
function print_msgs(){
  global $msgs;
  print $msgs;
}

add_msg("test");
add_msg("test2");
print_msgs();
?>

global告诉PHP需要在本地函数scope中使用全局变量。

答案 1 :(得分:10)

它是在全球范围内定义的。如果您想使用它,请使用global

答案 2 :(得分:5)

对这样的事情使用全局变量是一种糟糕的做法。考虑一种替代方法,如下所示:

class MessageQueue {
  private static $msgs;


  public static function add_msg($msg){
    self::$msgs .= "<div>$msg</div>"; 
  }
  public static function print_msgs(){
    print self::$msgs;
  }
}


MessageQueue::add_msg("test");
MessageQueue::add_msg("test2");
MessageQueue::print_msgs();

答案 3 :(得分:1)

如果你不想使用全局变量,你可以使用

 function add_msg($msg)
   {
         echo  "<div>$msg</div>";
   }
    add_msg("test");
    add_msg("test2");

功能,结果将是相同的。