2010-03-20 37 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();