2010-11-08 17 views
29

Estoy tratando de cambiar una variable que está fuera de una función, desde dentro de una función. Porque si la fecha que está verificando la función supera cierta cantidad, necesito que cambie el año de la fecha al comienzo del código.Cambiar una variable global desde dentro de una función PHP

$var = "01-01-10"; 
function checkdate(){ 
    if("Condition"){ 
      $var = "01-01-11"; 
     } 
} 

Respuesta

38

A. Utilice la palabra clave global para importar desde el ámbito de la aplicación.

$var = "01-01-10"; 
function checkdate(){ 
    global $var; 
    if("Condition"){ 
     $var = "01-01-11"; 
    } 
} 
checkdate(); 

B. Utilice la matriz $GLOBALS.

$var = "01-01-10"; 
function checkdate(){ 
    if("Condition"){ 
     $GLOBALS['var'] = "01-01-11"; 
    } 
} 
checkdate(); 

C. Pase la variable by reference.

$var = "01-01-10"; 
function checkdate(&$funcVar){ 
    if("Condition"){ 
     $funcVar = "01-01-11"; 
    } 
} 
checkdate($var); 
+0

Para el tercer ejemplo (C), ¿deberían la primera y la última líneas hacer referencia a $ var o $ funcVar ... o debería ser esa última línea '$ var = checkdate ($ var);'? –

+2

@JeromyFrench La primera y la última línea se refieren a la variable en el ámbito externo, llamada '$ var'.Dentro de la función puede tener cualquier otro nombre, así que elegí '$ funcVar' específicamente para ilustrar que el nombre puede ser diferente. Con respecto a '$ var = checkdate ($ var);', el propósito general del ejemplo era mostrar el paso _por referencia_ y cambiar la variable pasada directamente en la función. –

+2

Ok, creo que lo entiendo. 'function checkdate (& $ funcVar)' combinado con 'checkdate ($ var);' mapea el '$ var' externo al interno' $ funcVar'. –

44

sólo tiene que utilizar la palabra clave global así:

$var = "01-01-10"; 
function checkdate(){ 
    global $var; 

    if("Condition"){ 
      $var = "01-01-11"; 
     } 
} 

Cualquier referencia a esa variable será la de la global a continuación.

+0

pero quiero cambiar la variable global, de modo que sea lo que sea que configure var, ¿afectará la variable global fuera de la función? –

+4

Eso es lo que hará. El uso de 'global' cambia la variable' $ var' dentro de la función para apuntar a la global. Cuando cambias esa variable dentro de la función, cambiará la global. – Buggabill

8

Todas las respuestas aquí son buenas, pero ... ¿estás seguro de que quieres hacer esto?

Generalmente, es una mala idea cambiar las variables globales desde las funciones, porque puede causar fácilmente el código de espagueti, cambiar las variables en todo el sistema, las funciones son interdependientes, etc. Es un verdadero desastre .

Por favor, me permito sugerir algunas alternativas:

1) la programación

2) Tener la función devuelve un valor, que es asignado por la persona que llama orientada a objetos.

p. Ej. $ Var = checkdate();

3) Tener el valor almacenado en una matriz que se pasa a la función por referencia

función checkdate (& $ valores) { si (condición) { $ valores [ "fecha" ] = "01-01-11"; } }

Espero que esto ayude.

+1

La alternativa # 2 es el rey. – Stephen

5

probar este pase por referencia

$var = "01-01-10"; 
    function checkdate(&$funcVar){ 
     if("Condition"){ 
      $funcVar = "01-01-11"; 
     } 
    } 
    checkdate($var); 

o probar este mismo que el anterior, manteniendo la función como mismo.

$var = "01-01-10"; 
    function checkdate($funcVar){ 
     if("Condition"){ 
      $funcVar = "01-01-11"; 
     } 
    } 
    checkdate(&$var); 
Cuestiones relacionadas