我的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中的消息
是的,这应该是一个共享文件,但目前我已将其剥离到我粘贴的内容。有什么想法吗?
答案 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");
功能,结果将是相同的。