Bonjour,
que signifie le '&' devant une variable ?
merci beaucoup
Bonjour,
que signifie le '&' devant une variable ?
merci beaucoup
Ca signifie que c'est une variable ?!
Plus ou moins oui, mais pas exactement.
C'est ce qu'on appel un pointeur sur variable. Et oui, il y a une différence
Voici quelques exemples, qui seront plus parlant:
avant tout, Une petite compréhension très grossière de comment fonctionne une variable php:
Il faut comprendre que lorsque tu initialise une nouvelle variable, php va la créer avec un ID de référence, en quelque sorte.
Par exemple si tu fais $test = "test";
PHP va créer une nouvelle variable (avec l'id 1 par exemple) qui vaudra "test"
Si tu fait de nouveau appel à cette variable, PHP ira chercher l'id 1 pour la modifier, l'écraser ou juste l'afficher.
Premier exemple, avec une variable classique
c'est à dire que $str aura pour valeur LE TEXT de la variable passée en paramètre
Celle-ci est une NOUVELLE variable (id 2 par exemple) initialisée lors de l'appel de la fonction, et qui sera détruite à la fin de celle ci (d'où l'utilité indispensable de faire un return $str)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 function upThis($str){ $str = strtoupper($str); return $str; } $test = "text de test";
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 // TEST A: upThis($test); //dans ce cas il ne se passe rien, puisque la variable n'est pas écrasée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 // TEST B: $test = upThis($test); // La c'est OK, $test = "TEXT DE TEST";
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 // TEST C: $test2 = upThis($test) // La c'est OK pour $test2 qui vaut donc "TEXT DE TEST", mais $test ne change pas et vaut toujours "text de test";
Deuxième exemple avec un pointeur,
c'est à dire que $str fait REFERENCE A LA VARIABLE que tu lui envoie en paramètre, Et donc la modifie directement
Il ne s'agit ici pas d'une nouvelle variable, mais belle est bien de la varaible d'id 1, même si celle ci porte un nom différent (ici $str au lieu de $test) !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 function upThis(&$str){ $str = strtoupper($str); return $str } $test = "text de test";
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 // TEST A: upThis($test); // Dans ce cas donc, la variable $test est directement modifiée, pas besoin de la ré-écrasée. // Le résultat est donc OK, $test = "TEXT DE TEST";
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 // TEST B: $test = upThis($test); // Et ici également.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 // TEST C: $test2 = upThis($test); // Ici les deux variables vallent "TEXT DE TEST", puisque $test2 est initialisé avec le retour de la fonction, et que $test est modifier par référence.
Si je dis pas n'importe quoi, l'utilisation des pointeurs prends moins de ressources qu'une utilisation de variable, puisqu'il n'y a pas besoin de créer de variable temporaire dans la fonction,
Et donc pas besoin de réinitialiser une variable plus ou moins grosse (gros textes, fichiers ...): Gain de performances.
Cependant, il n'est pas toujours pratique d'utiliser les pointeurs, par exemple, dans le cas ou on aurait toujours besoin de la première variable:
$userName = "Dupond";
$userNameUP = upThis($userName); // "DUPOND"
Dans ce cas précis, si tu avait utilisé un pointeur, tu n'aurais pas pu garder $userName en minuscule, celui ci aurait également été modifié.
Troisième test (à vérifier):
Et là, normalement, le cas intéressant est le TEST C
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 function upThis(&$str){ $str = strtoupper($str); return true; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $test2 = upThis($test); //$test est modifié par référence, donc celle ci vaut "TEXT DE TEST" //$test2 prends le retour de la fonction, et vaut donc TRUE
Voila voila, j'ai pas vraiment tester tout ça pour vérifier ma syntaxe, mais l'idée est la et je pense pas avoir dis trop de bêtises ^^
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager