Version complète: sur le forum Webmaster Hub : variables globales
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
cevichero
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 :
CODE
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? tongue.gif
merci de m'éclairer là-dessus svp

merci smile.gif
cevichero
je viens de m'apercevoir de ma boulette nonono.gif
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 :
CODE
<?
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 :
CODE
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... wacko.gif
un coup de main svp? merci
captain_torche
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
merci de ta réponse Captain, smile.gif

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 :
CODE
$enteteFlash = pageType($pageType, $level);
--et--
function pageType($pageType, $level) {
   ....
}


ça fonctionne tout aussi bien que :
CODE
function pageType() {
    global $pageType, $level;
    .....
}


alors, quelle méthode est la meilleure selon toi?
captain_torche
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.
cevichero
merci encore smile.gif
problème résolu!
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.