IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

global & $GLOBALS


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2008
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 306
    Par défaut global & $GLOBALS
    Bonjour,

    Soit disant global et $GLOBALS ont les mêmes fonctions, alors, pourquoi dans mon script la valeur retournée en fin de script par $truc est différente ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
     
    function message($machin)
    {
        global $truc;
     
        $machin = $GLOBALS['intro'] ." $truc $machin <br />";
        $truc = "M'avez-vous compris ?";
        return $machin;   
    }
     
     
    $intro = "Je pars ";
    $truc = "maintenant en directon ";
    echo message(" de Brest.");
     
    $intro = "Je reviens ";
    $truc = "maintenant en direction ";
    echo message(" de Saint-Tropez.");
     
    echo $truc;
    ?>
    Retourne "m'avez vous compris ?"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?php
     
    function message($machin)
    {
        $truc = $GLOBALS['truc'];
     
        $machin = $GLOBALS['intro'] ." $truc $machin <br />";
        $truc = "M'avez-vous compris ?";
        return $machin;   
    }
     
     
    $intro = "Je pars ";
    $truc = "maintenant en directon ";
    echo message(" de Brest.");
     
    $intro = "Je reviens ";
    $truc = "maintenant en direction ";
    echo message(" de Saint-Tropez.");
     
    echo $truc;
    ?>
    Retourne la dernière valeur affectée à la variable en-dehors du script...

    Merci pour vos réponses ^^

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    ton incompréhension est liée à la portée de la variable $truc dans le deuxième code.

    Dans ta fonction message() quand tu fais $truc = $GLOBALS['truc'];, tu copies la valeur de $GLOBALS['truc']; dans $truc et $truc n'a qu'une portée limitée à la fonction message().
    Donc quand tu fais plus loin $truc = "M'avez-vous compris ?";, tu ne modifies en rien la valeur globale de $truc (définie en dehors de cette fonction), juste la variable locale qui disparaît à la fin de la fonction message().

    Pour que ça marche, voici comment tu devrais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function message($machin)
    {
        $truc            = $GLOBALS['truc'];
        $machin          = $GLOBALS['intro'] ." $truc $machin <br />";
        $GLOBALS['truc'] = "M'avez-vous compris ?";
        return $machin;
    }
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function message($machin)
    {
        $truc   =& $GLOBALS['truc'];    // ICI c'est une référence
        $machin =  $GLOBALS['intro'] ." $truc $machin <br />";
        $truc   =  "M'avez-vous compris ?"; // vu que $truc est une référence, tu modifies en fait $GLOBALS['truc']
        return $machin;
    }
    J'espère avoir été clair.

    Un dernier point, généralement utiliser des variables globales c'est une très très mauvaise idée, ça rend le code plus difficilement maintenable. Sans compter que tu peux t'en passer dans 100% des cas.

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/05/2014, 14h30
  2. Variable globale, pas globale.
    Par nuphius dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/02/2009, 19h07
  3. Fichier de fonctions globales
    Par PEM dans le forum C++Builder
    Réponses: 5
    Dernier message: 10/07/2002, 22h35
  4. variables locales ou globales ???
    Par elvivo dans le forum C
    Réponses: 13
    Dernier message: 03/07/2002, 09h22
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 09h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo