2010-03-20 75 views
9

我的PHP有点生疏,但现在令我难以置信。我搜索了这个并阅读了所有看起来相关的stackoverflow问题,但这些问题似乎都有合法的未定义变量。这让我相信我的问题是同样的问题,但是没有多少注意到我减少了这一点的简单代码似乎让我无处不在。请有人给我我的戴帽,并告诉我我做错了什么!PHP的声明我的定义变量是undefined

<?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(); 
?> 

这给我下面,狂揽输出:

说明:未定义变量:封邮件在C:\瓦帕\ WWW \ fgwl \上线PHP-LIB \ fgwlshared.php 7

注意:未定义变量:用C的MSG:\瓦帕\ WWW \ fgwl \上线PHP-LIB \ fgwlshared.php 7

说明:未定义变量:封邮件在C:\瓦帕\ WWW \ fgwl \ PHP-第10行的lib \ fgwlshared.php

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

回答

10

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

+1

是的。它做到了。看起来像我需要刷新在PHP范围。谢谢! – tedders 2010-03-20 00:43:06

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

我对此表示赞赏,因为它回答了这个问题,但我必须补充说,使用全局变量是非常糟糕的做法。全球思考,在当地范围内行事。没有理由,他们不会在衬衫上打印。 – Kris 2010-03-20 00:42:13

+0

感谢这个例子。 – tedders 2010-03-20 00:43:41

+1

不客气。但请保持克里斯在你脑海中的建议。对于这个例子,很清楚发生了什么,但是对于大的应用程序,它可能变得混乱和不清楚谁在摆弄哪些变量,因此容易出错。 – Veger 2010-03-20 00:49:06

1

,如果你不希望使用全局变量,你可以使用JAST

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

功能,其结果将是相同的。

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();