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 :

Portée des variables: Include dans une fonction


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 119
    Points : 81
    Points
    81
    Par défaut Portée des variables: Include dans une fonction
    Bonjour,
    Donc nous savons qu'un fichier inclu (include()) dans une fonction s'exécutera dans l'environnement de variable de celle-ci... (seule les variables locales à la fonction seront disponibles)
    En fait j'écris une classe qui m'inclut des formulaires et autres interfaces d'admin en fonction du niveau de l'utilisateur, que j'appelle comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session->inclure( $path , $level) //où $level correspond au niveau requis. Ex: $level = 2: user de niveau 2 et+ aura le formulaire mais pas le 1
    l'intérêt est de pouvoir inclure des modules à la volée en une seule ligne, visibles et utilisables uniquement par les users de niveaux authorisés...
    bref, la seule méthode que j'ai trouvé est sur le manuel php, avec ob:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     ob_start();
            include $filename;
            $contents = ob_get_contents();
            ob_end_clean();
            return $contents;
    sauf que je ne peux pas mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print($session->inclure( $path , $level) )
    et avec eval(), ça ne semble pas fonctionner non plus:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval($session->inclure( $path , $level ) ) //il ne voit apparemment pas les variables globales
    merci d'avance...

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    pour tu peux pas faire : print($session->inclure( $path , $level) ) ?

    ps : ob_get_clean est plus simple

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 119
    Points : 81
    Points
    81
    Par défaut
    pour tu peux pas faire : print($session->inclure( $path , $level) ) ?
    je me disais qu'on ne pouvait pas 'printer' du code php... de toute manière, même si ne met que l'appel à la methode, il l'évalue déjà dans le contexte de la classe:
    $session->inclure( $path , $level ) ;
    me renvoie exactement la même erreur:
    undefined variables...

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par BlindeKinder Voir le message
    je me disais qu'on ne pouvait pas 'printer' du code php... de toute manière, même si ne met que l'appel à la methode, il l'évalue déjà dans le contexte de la classe:
    $session->inclure( $path , $level ) ;
    me renvoie exactement la même erreur:
    undefined variables...
    y'a pas de code a "printer" pusique que tu fais un include, ton code est interpréter et mis dans une variable c'est cette variable que t'affiche, l'erreur se situe dans ton include ou avant ? montre ton erreur complete

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 119
    Points : 81
    Points
    81
    Par défaut
    l'erreur se situe dans ton include ou avant ?
    justement, dans l'include, je viens de comprendre qu'il s'exécutait bien au niveau de la classe... Peu importe l'erreur, je la comprend bien, il me dit que les variables utilisées dans le fichier inclu et déclarées dans le script principal ne sont pas déclarées, donc qu'il s'exécute bien dans la classe... Maintenant il y a la solution d'importer les $GLOBALS, genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $GLOBALS += get_defined_vars() //ou
    extract($GLOBALS, EXTR_REFS);
    mais ça m'a pas l'air très propre, sans compter que le script inclu a toujours accès aux variables/attributs de la méthode/classe... J'imaginais un truc plus transparent...
    qu'en pensez-vous?

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par BlindeKinder Voir le message
    justement, dans l'include, je viens de comprendre qu'il s'exécutait bien au niveau de la classe... Peu importe l'erreur, je la comprend bien, il me dit que les variables utilisées dans le fichier inclu et déclarées dans le script principal ne sont pas déclarées, donc qu'il s'exécute bien dans la classe... Maintenant il y a la solution d'importer les $GLOBALS, genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $GLOBALS += get_defined_vars() //ou
    extract($GLOBALS, EXTR_REFS);
    mais ça m'a pas l'air très propre, sans compter que le script inclu a toujours accès aux variables/attributs de la méthode/classe... J'imaginais un truc plus transparent...
    qu'en pensez-vous?
    pourquoi pas un extract après ca dépend comment sont tes layouts

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 119
    Points : 81
    Points
    81
    Par défaut
    Excuse-moi: layouts?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 119
    Points : 81
    Points
    81
    Par défaut
    qu'entends-tu par layouts?

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    Citation Envoyé par BlindeKinder Voir le message
    qu'entends-tu par layouts?
    la partie HTML

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 119
    Points : 81
    Points
    81
    Par défaut
    ben oui, il y aurait des partie en texte html...

    Finalement, j'ai fait une méthode 'verify' que je met en début de chaque script / fichier inclu, qui vérifie le login et renvoie un booléen. Je l'utilise comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ( !$session->verify( $level ) ) {
    return False ;
    }
    ce qui ne me permet pas d'utiliser le même script pour des niveaux d'utilisateurs différents selon son emplacement, il faudra faire une copie...
    si vous avez une meilleure solution, je ne connais pas la 'bonne pratique'... j'invente au fur et à mesure.

Discussions similaires

  1. Portée d'une variable tableau dans une fonction JS
    Par renaud26 dans le forum jQuery
    Réponses: 7
    Dernier message: 02/08/2011, 10h24
  2. Réponses: 1
    Dernier message: 15/04/2008, 18h36
  3. nombre des variables dynamique dans une fonction
    Par Abdelkaoui dans le forum C
    Réponses: 10
    Dernier message: 29/02/2008, 15h37
  4. portée des variables globales dans un fichier js
    Par crakazoid dans le forum Général JavaScript
    Réponses: 19
    Dernier message: 14/04/2006, 16h49
  5. variable dynamique dans une fonction javascript
    Par Shivaneth dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/04/2005, 15h58

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