2010-12-11 9 views
9

Je dois fonctionner dans deux fichiers différents. l'un d'eux ajouter un nouvel élément à un tableau chaque fois est appelée et le tableau doit être accessible .que je l'ai fait car il est:tableau global en php

function1(){ 

    global $array; 

    $array[] = 'hi'; 

} 

mais il crée juste un élément dans le tableau même si j'appelle cela Fonction 4 fois.

+0

Notez que [globals sont presque toujours mauvais] (http://c2.com/cgi/wiki?GlobalVariablesAreBad). – outis

Répondre

11

Ce que vous avez fait devrait fonctionner.

<?php 

function function1(){ 

    global $array; 

    $array[] = 'hi'; 

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

Test it.

Vous avez probablement un autre problème. Veuillez noter que la durée de vie de toutes les variables est l'exécution actuelle de votre script. Ils n'existeront pas dans une course successive. Pour cela, vous devez utiliser une sorte de persistance comme session, cookie, système de fichiers, base de données.

Pour plus d'aide, postez votre code complet.

+0

ok, il est donc préférable d'utiliser une session pour it.thanks. –

+2

Donc, les appels multiples n'ont pas été effectués dans le même cycle? Ai-je deviné le problème? –

+0

oui Alin, les fonctions s'exécutent sur une nouvelle requête http. Elles n'ont pas appelé dans le même run.it était de ma faute. –

5

Je suis un peu confus par le libellé de votre question. Quand vous dites "je dois fonctionner dans deux fichiers différents". voulez-vous dire que vous avez "deux" fonctions?

Si vous avez deux fonctions essayant toutes deux d'utiliser votre variable $ array, vous devrez appeler global $array; dans les deux fonctions. La raison de ceci est que global est un peu trompeur. Tout ce qu'il fait vraiment est d'assigner une référence à un membre de $_GLOBALS à une variable dans la portée locale qui a le même nom que l'index $ _GLOBALS. En d'autres termes, si vous faites quelque chose comme ceci:

global $variable; 

c'est essentiellement la même chose que de dire ceci:

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

La variable réelle $variable est encore SCOPED au niveau de la fonction, il arrive juste avoir une référence à une variable globale.

L'implication de ceci est que si vous ne définissez pas global $variable dans chaque fonction, vous créez simplement une toute nouvelle variable dans le cadre de cette fonction. Lorsque la fonction se termine, la variable est désactivée et toutes les modifications apportées à la fonction sont perdues.

Avec tout cela, les variables globales ont toujours tendance à être une mauvaise idée. C'est beaucoup plus clair si vous maintenez simplement une variable locale, et passez-la comme paramètre à d'autres fonctions si nécessaire.

+0

merci, mon problème est résolu maintenant. –

+0

ne devrait-il pas être '$ GLOBALS' au lieu de' $ _GLOBALS' –