Modérateur PHPfrance |
2575 Messages
20 janv. 2011, 12:56
Bonjour,
Le modificateur
& situé juste avant un paramètre déclaré en entrée d'une fonction permet de passer ce paramètre par sa référence (ou adresse) au lieu de le passer par valeur. Autrement dit, un paramètre de type :
& $param1 correspond à la base à une variable déclarée dans le programme appelant la fonction et cette dernière peut le modifier à volonté puisqu'il est passé par référence. Le passage normal de paramètres par valeur ne permet pas à la fonction de réécrire dans les variables originaires du programme appelant. Exemple:
// Fonction déclarée avec un paramètre à passer par référence
function incrementer(& $param1){
$param1 ++; // ici $param1 se réfère à une variable passée à la fonction par le programme appelant
}
// Programme principal utilisant cette fonction
$var1 = 1; // variable locale au programme principal
echo "var1 avant l'appel de la fonction = " . $var1;
// passage de $var1 en tant que paramètre par référence à la fonction incrementer()
incrementer($var1);
echo "var1 après l'appel de la fonction = " . $var1; // ici $var1 a été modifiée par la fonction incrementer (la valeur résultat est 2)
Ici, la fonction incrementer(& $param1) se permet de modifier la variable $var1 passée par le programme principal via le paramètre $param1 car elle travaille avec l'adresse de $var1 dans la mémoire du programme principal.
NB. Contrairement, un passage par valeur (sans & avant $param1) n'octroie qu'un accès en lecture seule à la valeur passée à la fonction, c'est le cas normal.
Pour la deuxième question, le modificateur
global permet de déclarer, au sein d'une fonction, un accès aux variables du contexte du programme appelant et c'est la même chose que $GLOBALS sauf que ce dernier est un tableau/variable superglobale (vu par défaut dans tous les contextes de PHP comme $_POST, $_GET, $_SESSION, $_ENV...)
[EDIT: Voir l'exemple précédent de
xTG ]
Il faut lire un p'tit peu sur
la portée des variables dans les différents contextes d'un programme procédural
--------
//////----
//---
//----
//////
-------
//---
//----
//---
//----
//---
//
------
//////----
//////-----
//////
-----
||--------
||--
||---
||
Prendre le recul n'est pas une perte de temps.
ps:
Affrontez moi dans l'arène