3 votes

PHP et portée des fonctions

Je me demandais ce qui se passe exactement quand je fais ça :

$my_variable = 'foo';
function whatever(){
    $my_variable = 'bar';
    global $my_variable;
}

Je sais que, dans le cadre de la fonction $my_variable est maintenant "foo".

Qu'est-ce qui se passe en interne ? Quand je fais $my_variable = 'bar'; Dans ma fonction, j'ai créé une variable locale. Lorsque je fais global $my_variable; sur la ligne suivante, que se passe-t-il exactement ? Le fichier local est automatiquement supprimé ?

2voto

Marc B Points 195501

Jusqu'au global est traitée, la fonction utilisera le fichier local bar copie du varaible. Une fois qu'il est déclaré global, la version locale est cachée (ou peut-être détruite, pas sûr...) et seule la version globale est disponible. e.g :

$z = 'foo';
function whatever() {
    echo $z; // warning: undefined variable
    $z = 'bar';
    echo $z; // bar
    global $z;
    echo $z; // foo
}
whatever();

2voto

hakre Points 102271

Oui la variable locale est automatiquement supprimée ou, pour mieux dire, elle est remplacée par la variable globale.

0voto

periklis Points 4978

Pensez-y comme ça :

$GLOBALS['my_variable'] = 'foo';
function whatever(){
    $my_variable = 'bar';
    $my_variable = $GLOBALS['my_variable'];
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X