Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/02/2011, 17h32   #1
Membre du Club
 
Inscription : mars 2007
Messages : 116
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 116
Points : 52
Points : 52
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 :
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 :
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 :
print($session->inclure( $path , $level) )
et avec eval(), ça ne semble pas fonctionner non plus:
Code :
eval($session->inclure( $path , $level ) ) //il ne voit apparemment pas les variables globales
merci d'avance...
BlindeKinder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 17h49   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
pour tu peux pas faire : print($session->inclure( $path , $level) ) ?

ps : ob_get_clean est plus simple
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 18h03   #3
Membre du Club
 
Inscription : mars 2007
Messages : 116
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 116
Points : 52
Points : 52
Citation:
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...
BlindeKinder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 18h08   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 18h31   #5
Membre du Club
 
Inscription : mars 2007
Messages : 116
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 116
Points : 52
Points : 52
Citation:
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 :
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?
BlindeKinder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 18h36   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
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 :
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 21h30   #7
Membre du Club
 
Inscription : mars 2007
Messages : 116
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 116
Points : 52
Points : 52
Excuse-moi: layouts?
BlindeKinder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 11h45   #8
Membre du Club
 
Inscription : mars 2007
Messages : 116
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 116
Points : 52
Points : 52
qu'entends-tu par layouts?
BlindeKinder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 13h23   #9
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
Citation:
Envoyé par BlindeKinder Voir le message
qu'entends-tu par layouts?
la partie HTML
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 18h45   #10
Membre du Club
 
Inscription : mars 2007
Messages : 116
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 116
Points : 52
Points : 52
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 :
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.
BlindeKinder est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h41.


 
 
 
 
Partenaires

Hébergement Web