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 :

Variable global inexistante


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 24
    Par défaut Variable global inexistante
    Bonjour,

    J'ai un petit soucis avec une variable globale que j'essaie de récupérer dans une fonction, voici quelques explications :

    J'ai un fichier index.php qui inclut un fichier modules.php qui lui même inclut un fichier traduction.php.
    index.php -> modules.php -> traduction.php

    J'appelle les fonctions de modules.php depuis le fichier index.php via call_user_func().

    J'aimerais utiliser dans les fonctions de mon fichier modules.php des variables qui sont en provenance de traduction.php, pour cela dans mes fonctions du fichier modules.php je déclare les variables globales que je désire, seulement pas de chance ça ne fonctionne pas !

    J'ai reproduit le même code en très simplifié ailleurs et ça fonctionne.
    Si je fais un isset() sur la variable que j'ai déclaré en global dans ma fonction, ça me retourne false...

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    Il faut que tu POST ton code si tu veux de l'aide, as-tu utilisé $_GLOBALS ?

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 24
    Par défaut
    J'ai essayé $_GLOBALS aussi dans la fonction mais ça ne trouve pas la variable.
    J'ai essayé d'inclure le fichier traduction.php avec autre chose que require_once() : include(), require(), c'est la même chose ça ne fonctionne pas.

    Avec le code ci-dessous, le echo de modules.php n'affiche rien. Et si je fais un isset() sur $membresLang après le global, ça me retourne false.
    Bien entendu si j'appelle cette variable en dehors de la fonction, elle est bien présente.

    Pour ce qui est du code, voici l'inclusion du fichier traduction.php depuis le fichier modules.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if(!$fileLang || !$fileClass) {
      echo "Il manque un fichier important !";
      exit;
    } else {
      require_once($fileLang);
      foreach($membresLang as $cle => $valeur) {
        define("$cle", "$valeur");
      }
      require_once($fileClass);
    }
    toujours dans ce fichier modules.php, voici ma fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function membres_main() {
      global $membresLang;
      echo $membresLang;
    }
    le fichier traduction.php contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $membresLang = array("fr", "en");
    Il n'y a pas grand chose comme code...si il faut autre chose, dites le moi.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    Réessaye plutot $_GLOBALS, tu verras ca devrait marcher comme sur des roulettes.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 24
    Par défaut
    Je viens d'essayer à nouveau, c'est $GLOBALS au fait sans l'underscore.

    J'ai supprimé global $membresLang; du fichier module.php et j'ai remplacé le echo par echo $GLOBALS["membresLang"]; et j'ai droit à ceci comme erreur :
    Undefined index: membresLang

  6. #6
    Membre confirmé Avatar de raoulchatigre
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2004
    Messages : 99
    Par défaut
    Salut,

    Je confirme c'est $GLOBALS et pas $_GLOBALS qui est bien plus facile à utiliser que le mot-clef global

    Peux-tu donner les valeurs de $fileLang et $fileClass ?

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 24
    Par défaut
    Pour $fileLang et $fileClass c'est quelque chose du genre :

    $_SERVER["DOCUMENT_ROOT"]."system/membres/lang/fr.php" et
    $_SERVER["DOCUMENT_ROOT"]."system/membres/membres.class.php"


    Autrement je me suis amusé avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    require_once($_SERVER["DOCUMENT_ROOT"]."system/membres/lang/fr.php");
    if(isset($membresLang)) { echo "ok"; } else { echo "pas ok"; }
    ##Fonctions GUI
    #Fonction principale - affichage par defaut
    function membres_main() {
      global $membresLang;
      if(isset($membresLang)) { echo "ok"; } else { echo "pas ok"; }
    }
    Le premier isset() affiche OK tandis que le second affiche PAS OK !!

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    Ecoute, peux-tu POSTER la partie ou tu initialises tes variables.
    de plus je t'assure qu'il vaut mieux utiliser $GLOBALS
    global est deprécié.

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 24
    Par défaut
    Ok merci pour le conseil, je vais uniquement utiliser $GLOBALS.

    Je déclare ma variable ($membresLang) dans le fichier fr.php sur lequel je fais un require_once() dans le code du poste précédent.

    Le fichier fr.php ressemble à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $membresLang = array(
    "_MEMB_LOGIN" => "Login",
    "_MEMB_MDP"               => "Mot de passe",
    "_MEMB_SECON"             => "Se connecter");
    Je n'arrive pas à comprendre pourquoi dans mon fichier modules.php, cette variable $membresLang n'arrive pas à passer en tant que $GLOBALS dans la fonction alors que dans le reste du code elle est bien reconnue.

    edit: ah j'ai peut-être bien trouvé quelque chose, si je fais un isset() sur ma variable ($membresLang) en dehors de la fonction ça retourne TRUE, par contre si je fais un isset() sur $GLOBALS["membresLang"] ça me retourne FALSE.
    Ma variable ($membresLang) que j'inclus dans le fichier modules.php ne serait pas considérée comme global, comment puis-je faire cela ?

  10. #10
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 24
    Par défaut
    Ouf j'ai enfin trouvé l'erreur mais je ne la comprend pas...

    Dans mon fichier fr.php, j'ai remplacé $membresLang = array() par $GLOBALS["membresLang"] = array().

    Je pensais que toute variable déclarée en dehors d'une fonction était accessible depuis $GLOBALS.

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    Eureka, ca marche maintenant...bon courage pour la suite.

  12. #12
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 24
    Par défaut
    Merci pour ton aide batataw.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Variable globale / Propriété des threads
    Par rgarnier dans le forum XMLRAD
    Réponses: 4
    Dernier message: 03/10/2003, 11h49
  2. Cacher Variable Url avec Variable Globale
    Par danuz dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/09/2003, 18h20
  3. Variable "globale" (dans plusieurs templa
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/06/2003, 20h22
  4. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 14h59
  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