2010-03-20 14 views
9

Mein php ist ein wenig eingerostet, aber das ist verrückt meine Meinung jetzt. Ich habe das gegoogelt und alle Stackoverflow-Fragen gelesen, die ich gefunden habe, die ähnlich aussahen, aber alle schienen legitime undefinierte Variablen in sich zu haben. Das führt mich zu der Annahme, dass meins das gleiche Problem ist, aber keine Menge, die auf das einfache Stück Code starrt, auf das ich es reduziert habe, scheint mich überall hin zu bringen. Bitte, gib mir jemand meine Dancekappe und sag mir, was ich falsch gemacht habe!php behauptet meine definierte Variable ist 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(); 
?> 

Das gibt mir die folgenden maddening Ausgabe:

Notice: Undefined variable: Nachr in C: \ wamp \ www \ fgwl \ php-lib \ fgwlshared.php on line 7

Hinweis: Nicht definierte Variable: msgs in C: \ wamp \ www \ fgwl \ php-lib \ fgwlshared.php auf Leitung 7

Hinweis: Nicht definierte Variable: msgs in C: \ wamp \ www \ fgwl \ PHP- lib \ fgwlshared.php in Zeile 10

Ja, das soll eine gemeinsame Datei sein, aber im Moment habe ich es auf genau das, was ich eingefügt habe, entfernt. Irgendwelche Ideen?

Antwort

10

Es ist auf globaler Ebene definiert. Verwenden Sie global, wenn Sie es verwenden möchten.

+1

yep. das hat es getan. sieht so aus, als müsste ich auf Bereiche in PHP auffrischen. Vielen Dank! – tedders

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 sagt, dass PHP die globale Variable in der lokalen Funktion scope verwenden müssen.

+1

Ich habe dies aufgestockt, weil es die Frage beantwortet, aber ich muss hinzufügen, dass es extrem schlecht ist, globale Variablen zu verwenden. global denken, lokal handeln. Sie drucken es nicht ohne Grund auf Shirts. – Kris

+0

danke für das Beispiel. – tedders

+1

Gern geschehen. Aber behalte den Rat, den Kris dir gegeben hat. Für dieses Beispiel ist klar, was passiert, aber für große (ger) Anwendungen kann es chaotisch und unklar werden, wer mit welchen Variablen fummelt und daher fehleranfällig ist. – Veger

1

wenn Sie nicht Globals verwenden möchten, können Sie verwenden

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

Funktion, das Ergebnis wird das gleiche sein Jast.

5

Die Verwendung von Globals für so etwas ist eine schlechte Übung. Betrachten Sie einen alternativen Ansatz wie den folgenden:

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