Aller au contenu

variables globales


cevichero

Sujets conseillés

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? :P

merci de m'éclairer là-dessus svp

merci :)

Lien vers le commentaire
Partager sur d’autres sites

je viens de m'apercevoir de ma boulette :nonono:

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... :wacko:

un coup de main svp? merci

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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?

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...