Faire le quiz link W3C close

Opérateur d'affectation

#1 Qu'est ce qu'une affectation ? open

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 open

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.

Affectation par valeur

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.

Résultat de l'exécution en PHP 8.2.1
Résultat exécution en version 8.2.1

#3 Affectation par référence open

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.

Affectation par référence

Les var_dump de $var1 et $var2 vont donner 1 pour la valeur et int pour le type.

Résultat de l'exécution en PHP 8.2.1
Résultat exécution en version 8.2.1

#4 A quoi ça sert ? open

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.