2010-03-20 5 views
9

Mon php est un peu rouillé, mais cela est ahurissant mon esprit en ce moment. J'ai googlé ceci et ai lu toutes les questions de stackoverflow que je pourrais trouver qui ont semblé reliées, mais tous semblaient avoir des variables non définies légitimes dans eux. Cela m'amène à croire que le mien est le même problème, mais le fait de ne pas regarder le simple code que j'ai réduit cela me semble aller n'importe où. S'il vous plaît, quelqu'un me donne ma casquette de cancre et dis-moi ce que j'ai fait de mal!php affirme ma variable définie est 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(); 
?> 

Cela me donne ce qui suit, sortie affolant:

Avis: Undefined variable: msgs dans C: \ wamp \ www \ fgwl \ php-lib \ fgwlshared.php sur la ligne 7

Indication: Undefined variable: msgs dans C: \ wamp \ www \ fgwl \ php-lib \ fgwlshared.php à la ligne 7

Indication: variable non définie: msgs dans C: \ wamp \ www \ fgwl \ PHP- lib \ fgwlshared.php sur la ligne 10

Oui, cela est censé être un fichier partagé, mais pour le moment j'ai dépouillé jusqu'à ce que je collais. Des idées?

Répondre

10

Il est défini à la portée mondiale. Utilisez global si vous souhaitez l'utiliser.

+1

yep. ça l'a fait. On dirait que j'ai besoin de rafraîchir sur des portées en php. Merci! – 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 dit que PHP besoin d'utiliser la variable globale dans la fonction locale scope.

+1

J'upvoted parce qu'il répond à la question, mais je dois ajouter que c'est une pratique extrêmement mauvaise à utiliser des variables globales. penser globalement, agir localement. Ils ne l'impriment pas sur des chemises sans raison valable. – Kris

+0

merci pour l'exemple. – tedders

+1

de rien. Mais garde le conseil que Kris a donné dans ton esprit. Pour cet exemple, il est clair que ce qui se passe, mais pour les grandes applications (ger), il peut devenir malpropre et pas clair qui est en train de jouer avec quelles variables et donc sujettes aux erreurs. – Veger

1

si vous ne voulez pas utiliser globals, vous pouvez utiliser jast

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

, le résultat sera le même.

5

Utilisation pour GLOBALS quelque chose comme ceci est une mauvaise pratique. Considérons une autre approche telle que la suivante:

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