Opérateur d'affectation
#1 Qu'est ce qu'une affectation ?
Si vous ne savez pas ce qu'est une affectation, alors ce qu'il faut que je précise en premier, c'est une affectation, ce n'est pas une égalité mathématique. Le signe égal est utilisé dans les deux cas, mais les situations n'ont strictement rien à voir 😃.
Dans un code informatique, une affectation consiste à attribuer une valeur à une variable. Il faut aussi se rendre compte qu'en attribuant la valeur, on transmet en même temps le type de la valeur. Si on affecte une valeur entière, alors la variable sera du type int
. Si on affecte un flottant, alors la variable sera de type float
et ainsi de suite.
Ce qu'il faut dire aussi, c'est que l'affectation est un opérateur, ce qui fait qu'une affectation retourne une valeur 😎.
Ci-dessous, le fait d'affecter 2
à $b
, fait que la valeur 2
est retournée par l'opérateur affectation. Donc la valeur 2
compte dans l'évaluation de l'expression. Je suis obligé de mettre des parenthèses parce que je ne sais pas qui, du plus ou de l'égal, va s'exécuter en premier.
Maintenant rentrons dans les détails! En fait, il existe deux types d'affectation, l'affectation par valeur et l'affectation par référence. Les affectations que l'on vient de faire sont, en fait, des affectations par valeur.
Je ne l'ai pas dit, et personne ne le dit, sauf si on doit parler, voir comparer une affectation par valeur à une affectation par référence, car à ce moment-là, les deux affectations sont différentes. Ci-dessous, on va regarder en quoi, elles sont différentes.
#2 Affectation par valeur
Dans le programme ci-dessous, ligne 2, j'affecte la chaîne 'a'
à la variable $var1
.
A la ligne 3, j'affecte $var1
à $var2
. Si je le veux, si j'ai besoin, je peux préciser que j'affecte par valeur. Après cette affectation, je vais me retrouver avec deux valeurs à des emplacements mémoire différents. Chaque variable aura sa propre valeur qui vaut la chaîne de caractères 'a'
.
A la ligne 4, j'affecte, une nouvelle fois, la variable $var1
. Je lui affecte l'entier 1
.
Le var_dump
de $var1
va donner 1
pour la valeur et int
pour le type.
Le var_dump
de $var2
va donner 'a'
pour la valeur et string
pour le type.
#3 Affectation par référence
Dans le programme ci-dessous, ligne 2, j'affecte par valeur, la chaîne 'a'
à la variable $var1
.
A la ligne 3, j'affecte par référence en faisant $var2=&$var1
. Dans ce cas, je dois préciser, que j'affecte par référence. Après cette affectation par référence, je vais me retrouver avec une seule valeur sur un seul emplacement mémoire. Les deux variables partagent la même valeur qui vaut la chaîne de caractères 'a'
.
A la ligne 4, j'affecte, une nouvelle fois, la variable $var1
. Je lui affecte l'entier 1
. Etant donné qu'il n'y a qu'un seul emplacement mémoire, la valeur va aussi changer pour $var2
.
Les var_dump
de $var1
et $var2
vont donner 1
pour la valeur et int
pour le type.
#4 A quoi ça sert ?
La manip que l'on a faite aujourd'hui, ne sert qu'à introduire la notion de référence et à savoir comment obtenir une référence. On verra, lorsque l'on fera les fonctions, qu'il est très utile de pouvoir passer un argument par référence ou de retourner une valeur par référence. Ce qui fait que le côté applicatif, c'est plutôt à ce moment-là qu'on le verra.