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

ted*_*ers 9 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();
?>
Run Code Online (Sandbox Code Playgroud)

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

注意:未定义的变量:第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中的消息

是的,这应该是一个共享文件,但此刻我已经将它剥离到我粘贴的内容.有任何想法吗?

Veg*_*ger 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();
?>
Run Code Online (Sandbox Code Playgroud)

global告诉PHP需要在本地函数范围中使用全局变量.


Ign*_*ams 10

它是在全球范围内定义的.使用global,如果你想使用它.


Fra*_*mer 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();
Run Code Online (Sandbox Code Playgroud)