Modérateur PHPfrance |
2575 Messages
27 juin 2006, 14:40
avant de creuser ton tunnel dans le noir total essaye de comprendre les bases d'abord de la programmation procédurale comme ça tu auras quelques lanternes qui t'éclaireront le chemin :
Ton code se compose de 2 parties distinctes :
1. le code principal qui sera exécuté en 1° niveau
2. le code de la fonction "listage" qui n'est exécuté qu'à l'appel à partir du code principal
Le code principal utilise sa propre mémoire de données (variables globales) dont la durée de vie est celle du programme principal
Le code de la fonction lui aussi dispose de sa propre mémoire de données qui ne sera créée que l'orsque la fonction sera appellée (variables locales)
Il n'y a pas de relation entre une variable globale et une variable locale même si deux variables ont le même nom.
Les variables locales à une fonction disparaissent de la mémoire dès que la fonction qui les a créées disparait (se termine)
Par contre une fonction peut voir et accèder directement à une variable globale du programme principal sans passage de paramètres à la condition sous php d'utiliser la directive "global" dans la fonstion pour désigner la liste des variables globales à utiliser.
Exemple :
<?php
//Code principal
//déclarer 2 variables globales du principal
$var_globale1 = 1;
$var_globale2 = 2;
//appel de la fonction
modifier_var_globale1(); //cette fonction n'utilise pas la directive "global" pour accéder à la variable globale => elle ne peut pas y accèder
//Afficher les variables globales (après le passage de la fonction)
echo $var_globale1; //le passage de la fonction n'a aucun effet sur cette variable globale
//appel de la fonction
modifier_var_globale2(); //fonction accèdant à une variable globale
//Afficher les variables globales (après le passage de la fonction)
echo $var_globale2; //cette variable globale a été modifiée par la fonction
//Afficher les variables locales d'une fonction
créer_var_locale1(); //cette fonction crée ses propres variables locales
echo $var_locale1; //appel incorrect à une variable locale qui n'existe plus
//Les fonctions utilisées
function modifier_var_globale1(){
$var_globale1 = "modifiée"; //cette variable est concidérée locale même si son nom ressemble à une variable globale (dù à l'absence de la directive "global")
}
function modifier_var_globale2(){
global $var_globale2; //directive "global" permettant à la fonction d'accéder à une ou plusieurs variables globales
$var_globale2 = "modifiée";
}
function créer_var_locale1(){
$var_locale1 = 1; //variable locale
}
?>
Conclusion:
tes variables $b se trouvant dans le code principal est une variable globale différente de $b qui se trouve en local dans la fonction "listage"
Correction suggérée :
- Soit tu utilise la directive "global $b;" au niveau de la fonction pour qu'elle accéde directement à la variable globale $b du principal
Soit tu fais un "return $b;" à la fin de la fonction pour qu'elle retourne la valeur de la variable locale $b dans la variable globale $b du principal en écrivant l'appel comme ça:
$b = listage($chemin);
ps: un programme php qui fait explorateur de fichiers (FAQ) :
http://www.phpfrance.com/forums/voir_re ... php#133555
--------
//////----
//---
//----
//////
-------
//---
//----
//---
//----
//---
//
------
//////----
//////-----
//////
-----
||--------
||--
||---
||
Prendre le recul n'est pas une perte de temps.
ps:
Affrontez moi dans l'arène