2010-03-20 26 views
9

Mi php está un poco oxidado, pero esto me deja boquiabierto en este momento. Busqué en Google esto y leí todas las preguntas de stackoverflow que pude encontrar que parecían relacionadas, pero todas parecían tener variables legítimas indefinidas en ellas. Eso me lleva a creer que el mío es el mismo problema, pero ninguna cantidad de mirar el simple código al que he reducido esto parece llevarme a cualquier parte. ¡Por favor, que alguien me dé mi gorra de burla y me diga lo que hice mal!php afirma que mi variable definida no está definida

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

Esto me da la siguiente, la salida enloquecedor:

Aviso: Undefined variable: Mensajes en C: \ wamp \ www \ fgwl \ php-lib \ fgwlshared.php en la línea 7

Aviso: Undefined variable: Mensajes en C: \ wamp \ www \ fgwl \ php-lib \ fgwlshared.php en la línea 7

Aviso: Indefinido variables: Mensajes en C: \ wamp \ www \ fgwl \ PHP lib \ fgwlshared.php en la línea 10

Sí, se supone que es un archivo compartido, pero en este momento lo he reducido a solo lo que pegué. ¿Algunas ideas?

Respuesta

10

Se define en el alcance global. Use global si desea usarlo.

+1

sí. eso lo hizo parece que necesito repasar los ámbitos en php. ¡Gracias! – 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 que PHP necesita usar la variable global en el local de la función scope.

+1

Volví a subir esto porque responde la pregunta, pero debo agregar que es una práctica extremadamente mala usar variables globales. pensar globalmente, actuar en el ámbito local. No lo imprimen en camisas sin una buena razón. – Kris

+0

gracias por el ejemplo. – tedders

+1

de nada. Pero sigue el consejo que Kris te dio en tu mente. Para este ejemplo, está claro lo que está sucediendo, pero para aplicaciones grandes (ger), puede llegar a ser confuso y poco claro quién está jugando con qué variables y, por lo tanto, propenso a errores. – Veger

1

si no desea utilizar variables globales, puede Jast uso función

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

, el resultado será el mismo.

5

Usar globals para algo como esto es una práctica pobre. Considere un enfoque alternativo como el siguiente:

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(); 
Cuestiones relacionadas