cevichero Posté 18 Août 2006 Posté 18 Août 2006 Bonjour, pour une page qui est au niveau -1 de la racine, je veux lui attrribuer une variable $level avec comme contenu "../" qui me servira pour les chemins des liens et images éventuelles. je déclare cette variable comme suit : global $level;$level = "../"; sur cette page il y a aussi l'entete, le menu et le footer en include, le problème est que la variable $level n'est pas reconnue et que j'ai comme message d'erreur le fameux : Notice: Undefined variable: level in Cette variable golbale ne serait pas si globale que ça? merci de m'éclairer là-dessus svp merci
cevichero Posté 18 Août 2006 Auteur Posté 18 Août 2006 je viens de m'apercevoir de ma boulette en fait la variable est bien reconnue dans le fichier en include mais c'est dans la fonction pageType qu'elle n'est pas reconnue. voici la page simplifiée qui appelle l'include : <? global $level;$level = "../"; global $pageType;$pageType = "civilisations";?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><link href="../css_w3c_page.css" rel="stylesheet" type="text/css" /><title>PAGE TEST W3C</title></head><body> <div id="header"><?php include("../entete_w3c2.php"); ?></div></body></html> et le fichier entete_w3c2 en include : var_dump($level);/*** ENTETE - détermine le type de page et donc l'entete à afficher ***/function pageType($pageType) {var_dump($level); switch($pageType) { case 'situation' : $enteteFlash = "/tools/flash/enteteFlash_situation.swf"; break; case 'tourisme' : $enteteFlash = "/tools/flash/enteteFlash_tourisme.swf"; break; } //echo $enteteFlash;return $enteteFlash;} le premier var_dump affiche bien "../", pas le second celui qui est dans la focntion et qui me renvoie un message d'erreur, je pensais que si on déclarait une variable comme globale, ça suffisait pour qu"elle soit reconnue partout... un coup de main svp? merci
captain_torche Posté 18 Août 2006 Posté 18 Août 2006 Tu as mal placé ton "global $level". En utilisant ce mot-clé dans une fonction, tu spécifies que la fonction utilisera une variable externe à la fonction (une variable globale). Sinon, la fonction utilisera sa variable $level (et si elle n'existe pas, elle la crée, mais vide : ce qui t'arrive actuellement). Pour que tout fonctionne, il faut que tu déclares le global $level au début de ta fonction, et tout fonctionnera. Pour simplifier : le mot-clé "global" ne signifie pas "telle variable est globale" (comme tu le fais actuellement) : toutes les variables déclarées hors fonctions, sont globales. Mais il signifie "utilise la/les variable(s) globale(s) suivante(s)". Pour plus d'infos, je te conseille la lecture de l'article sur la portée des variables PHP
cevichero Posté 18 Août 2006 Auteur Posté 18 Août 2006 merci de ta réponse Captain, Je vois, j'ai du mal comprendre ma lecture sur les variables globales autrefois. Entretemps j'ai trouvé qu'on pouvait aussi passer les variables comme paramètres lors de l'appel de la fonction : $enteteFlash = pageType($pageType, $level);--et--function pageType($pageType, $level) { ....} ça fonctionne tout aussi bien que : function pageType() { global $pageType, $level; .....} alors, quelle méthode est la meilleure selon toi?
captain_torche Posté 18 Août 2006 Posté 18 Août 2006 Il vaut mieux passer les arguments en paramètres. Ca te permet de pouvoir réutiliser ta fonction, quel que soit le nom de tes variables.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant