php affirme ma variable définie est définie
Question
Mon php est un peu rouillé, mais cela est ahurissant mon esprit en ce moment. Je googlé cela et lu toutes les questions stackoverflow que je pouvais trouver qui avaient l'air liés, mais ceux semblaient tous avoir des variables non définies légitimes en eux. Cela me conduit à croire que le mien est le même problème, mais aucune quantité de regarder simple bout de code que je réduis cela me semble aller nulle part. S'il vous plaît quelqu'un me donner ma casquette dunce et dites-moi ce que je fait de mal!
<?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:
Indication: 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 sur la ligne 7
Indication: Undefined variable: 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. Toutes les idées?
La solution
Il est défini à la portée globale. Utilisez global
si vous voulez l'utiliser.
Autres conseils
<?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 le périmètre de la fonction locale .
En utilisant globals pour quelque chose comme ceci est une mauvaise pratique. Envisager une autre approche comme celle-ci:
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();
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.