Portée des variables : Comment utiliser "global" ?

pX
Petit nouveau ! | 1 Messages

18 mars 2006, 18:36

Bonjour

J'aimerais comprendre pkoi la valeur d'un tableau déclaré dans une fonction cesse d'être visible en dehors de ladite fonction !?!

J'ai pourtant lu (et relu :P ) le manuel à ce sujet, il me semble faire comme il dit, mais non, ça ne marche pas :
function Stocke() {
$imgPath = "IMG/tmp";
$handle= opendir($imgPath);
$i=0;
	while ($file = readdir($handle)) {
		if ($file != "." && $file != "..") {
			$img = "$imgPath/$file";
			$imgs[$i] = "$img";
			echo "<img src=\"$imgs[$i]\" height=\"$height\"/ class=\"preview\" border=\"0\"></a>";
			$i++;
		}
	}
}
Vous voyez l'echo de l'image ? Il marche, mais si je le sors de là, il ne voit plus "$imgs[$i]" et affiche "" (vide, quoi) ;Si je déclare $imgs[$i] comme ça :
Global $imgs;
$imgs = array()
(...)
dans "Stocke()", ça ne marche pas..?
Comment faire pour utiliser la cette variable et en lire les valeurs (c'est un tableau) dans une autre fonction ? (Du même script, au fait :) )

Ce forum a l'air très bien. Existe-t-il une MList PHP en français ? Ce serait tip-top.

Merci !!

Eléphant du PHP | 254 Messages

18 mars 2006, 19:22

tu peux oublier cet espece de mot clé "global" , y a mieux : utiliser le tableau des supers globales !

$GLOBALS

dans ton cas tu declares
$GLOBALS['imgs'][$i] = 'coucou, je suis une globale ;)';

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 mars 2006, 19:50

Par défaut, dans la plupart des langages, les variables ont ce que l'on appelle une portée locale. En gros, cela revient à dire qu'elle n'est visible/exploitable qu'entre les acolades où elle a été définie.

Le php est un peu plus souple puisqu'il te permet d'utiliser une variable qui aurait été définie dans un if {} à l'extérieur de celui-ci. En revanche, les fonctions ne permettent pas par défaut d'utiliser des variables qui leur sont extérieures.. elle vivent en autarcie quoi :)

Le mot clé global (ou la déclaration dans $GLOBALS) permet de leur rappeller qu'elles ne sont pas toutes seules dans le code, et qu'il y a d'autre variable qu'elles peuvent exploiter ;)

Ainsi
$var = 18;

function autarcie() {
  echo $var; // n'affichera rien, il ne connait pas d'autre $var que le sien, et comme il n'en a pas...
}
function ouvertSurLeResteDuMonde() {
  global $var; // ambassadeur en visite..
  echo $var; // affichera 18 :)
}
Edit : Une petite remarque en parallèle :
$var = 10;
function foisDeux() {
  $var = $var + 5; // il n'y a pas de global, ca n'affecte donc pas la variable externe
}
foisDeux(); // appel de la fonction
echo $var; // affichera 10, puisque la fonction ne connait pas la variable externe sil'on ne précise pas le global