2010-12-11 20 views
9

tengo que funcionar en dos archivos diferentes. uno de ellos habría que añadir un nuevo elemento a un conjunto cada vez que se llama y la matriz debe ser accesible .what lo hice porque es:matriz global en php

function1(){ 

    global $array; 

    $array[] = 'hi'; 

} 

pero acabo de crear un elemento en serie, incluso si esto lo llamo función 4 veces.

+0

Tenga en cuenta que [los globales son casi siempre malos] (http://c2.com/cgi/wiki?GlobalVariablesAreBad). – outis

Respuesta

11

Lo que hiciste debería funcionar.

<?php 

function function1(){ 

    global $array; 

    $array[] = 'hi'; 

} 
function1(); 
function1(); 
function1(); 
print_r($array); 

Test it.

Es probable que tenga otro problema. Tenga en cuenta que la vida útil de todas las variables es la ejecución actual de su secuencia de comandos. No existirán en una carrera sucesiva. Para eso necesita usar algún tipo de persistencia como sesión, cookie, sistema de archivos, base de datos.

Para obtener más ayuda, envíe el código completo.

+0

bien, entonces es mejor usar una sesión para ello. Gracias. –

+2

¿Entonces las llamadas múltiples no se hicieron en la misma ejecución? ¿Adiviné el problema, verdad? –

+0

sí Alin, las funciones se ejecutan en una nueva solicitud http. No llamaron en la misma ejecución. Fue mi culpa. –

5

Estoy un poco confundido por la redacción de su pregunta. Cuando dice "tengo que funcionar en dos archivos diferentes". ¿quieres decir que tienes "dos" funciones?

Si tiene dos funciones para tratar de usar su variable de $ array, deberá llamar al global $array; en ambas funciones.

La razón para esto es que global es un poco engañoso. Lo único que está haciendo realmente es asignar una referencia a un miembro de $_GLOBALS a una variable en el ámbito local que tiene el mismo nombre que el índice $ _GLOBALS. En otras palabras, si haces algo como esto:

global $variable; 

que es esencialmente el mismo que decir esto:

$variable =& $_GLOBALS['variable']; (assign by reference) 

La variable real $variable todavía está en el ámbito en el nivel de función, que sólo pasa a tener una referencia a una variable global.

La implicación de esto es que si no define global $variable en cada función, solo está creando una nueva variable dentro del alcance de esa función. Cuando la función finaliza, la variable no está configurada y se pierden los cambios que se le hacen dentro de la función.

Con todo lo dicho, las variables globales todavía tienden a ser una mala idea. Es mucho más claro si solo mantienes una variable local y la pasas como un parámetro a otras funciones cuando sea necesario.

+0

gracias, mi problema está resuelto ahora. –

+0

si no fuera '$ GLOBALS' en lugar de' $ _GLOBALS' –