2010-03-20 23 views
9

Il mio php è un po 'arrugginito ma questo mi sconvolge proprio adesso. Ho cercato su Google questo e ho letto tutte le domande StackOverflow che potevo trovare che sembravano correlate, ma tutte sembravano avere legittime variabili indefinite in esse. Questo mi porta a credere che il mio sia lo stesso problema, ma non fissando il semplice bit di codice che ho ridotto a questo sembra che mi porti da nessuna parte. Per favore qualcuno mi dia il mio cappellino e dimmi cosa ho fatto di sbagliato!php afferma che la mia variabile definita non è definita

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

Questo mi dà il seguente, uscita esasperante:

Avviso: Undefined variable: msg in C: \ wamp \ www \ fgwl \ php-lib \ fgwlshared.php sulla linea 7

Avviso: variabile non definita: msg in C: \ wamp \ www \ fgwl \ php-lib \ fgwlshared.php sulla linea 7

Avviso: non definiti variabili: msg in C: \ wamp \ www \ fgwl \ PHP lib \ fgwlshared.php sulla linea 10

Sì, questo dovrebbe essere un file condiviso, ma al momento l'ho ridotto a quello che ho incollato. Qualche idea?

risposta

10

È definito nell'ambito globale. Utilizzare global se si desidera utilizzarlo.

+1

sì. l'ha fatto sembra che ho bisogno di rispolverare gli ambiti in PHP. Grazie! – 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 dice che PHP ha bisogno di usare la variabile globale nella funzione locale scope.

+1

Ho svalutato questo perché risponde alla domanda, ma devo aggiungere che è una pratica estremamente scorretta usare le variabili globali. pensa globalmente, agisci in ambito locale. Non lo stampano sulle magliette senza una buona ragione. – Kris

+0

grazie per l'esempio. – tedders

+1

prego. Ma tieni il consiglio che Kris ti ha dato in mente. Per questo esempio è chiaro cosa sta succedendo, ma per le applicazioni di grandi dimensioni (ger), potrebbe diventare disordinato e poco chiaro chi sta manipolando con quali variabili e quindi incline agli errori. – Veger

1

se non si vuole usare variabili globali, è possibile Jast uso funzione

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

, il risultato sarà lo stesso.

5

L'utilizzo di globals per qualcosa di simile è una pratica scadente. Prendi in considerazione un approccio alternativo come il seguente:

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