2010-07-07 21 views
12

Sí que conozco variables globales es una mala práctica, pero la facilidad en que la regla para éste: PPHP variable global no está definido dentro de una función, incluso si la palabra clave global se utiliza

Mi código:

include('something.php'); //where $from is declared 

function myfunc() { 
    global $from; 
    echo "from(myfunc)=$from<br />"; 
    ... 
} 

echo "from=$from<br />"; 
myfunc(); 

El resultado es:

from=2010-05-01 
from(myfunc)= 

¿Qué está pasando? :(

EDIT: Si ayuda, todo el código anterior está dentro de un archivo de vista en CodeIgniter (y sí, sé que no se supone que las funciones dentro de vistas: P)

+1

Lo probé y funciona bien (después de agregar un punto y coma después del 'echo') en PHP 5.3.1. – Harmen

Respuesta

22

apuesto a una la cerveza no está dentro del alcance global con este fragmento. ¿estás llamando esto desde dentro de una función?

en ese caso, el $from se define en something.php no es global, mientras que el uno se hace referencia en la función es.

Probablemente funcionará si agrega un global $from; i nside something.php antes de definir $from.

No hace falta decir que no es una buena práctica de ninguna manera, y debe seguir los consejos de Gordon.

+0

Hola Pekka, tienes razón. Agregué '$ GLOBALS ['from'] = 'value'' fuera de la función, y el valor se encontró dentro de' myfunc() '. No me di cuenta de que esta página fue generada por la función '$ this-> load-> view()' de CodeIgniter. ¡Gracias! – Obay

11

Hágase un favor y utilizar Dependency Injection.

function myfunc($from) { 
    return "from(myfunc)=$from<br />"; 
} 
$from = '2010-05-01'; 
echo myfunc($from); 

Si lo hace, hará que el código sea más fácil de mantener, y menos junto con más facilidad unidad comprobable, ya que está aislado del ámbito global. Además, cuando lo haces, la gente piensa que eres genial.

+4

+1 Nunca me he dado cuenta de que puedo decir "He estado haciendo inyección de dependencia desde 2002" :) –

+0

Gracias, en su lugar usaré Inyección de Dependencia: P – Obay

Cuestiones relacionadas