9

我的 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 中的 msgs

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

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

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

4

4 回答 4

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 需要在本地函数范围内使用全局变量。

于 2010-03-20T00:39:38.420 回答
10

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

于 2010-03-20T00:38:24.933 回答
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();
于 2010-03-20T15:03:11.500 回答
1

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

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

函数,结果是一样的。

于 2010-03-20T01:33:54.477 回答