Passage par référence
Fait partie de la section Logique & Flux du Journey PHP de Coddy. Leçon 7 sur 68.
Par défaut, lorsque vous transmettez une variable à une fonction en PHP, la fonction reçoit une copie de la valeur de cette variable. Cela signifie que les modifications effectuées à l’intérieur de la fonction n’affectent pas la variable originale en dehors de la fonction.
Cependant, vous souhaitez parfois qu’une fonction modifie directement la variable d’origine. C’est là qu’intervient le passage par référence. En ajoutant une esperluette (&) avant le nom du paramètre dans la définition de votre fonction, vous indiquez à PHP de transmettre la variable réelle plutôt qu’une copie :
<?php
function doubleValue(&$number) {
$number = $number * 2;
}
$value = 10;
doubleValue($value);
echo $value; // Affiche : 20
?>Remarquez comment $value est passé de 10 à 20, même si nous n’avons rien renvoyé depuis la fonction. Le paramètre &$number crée un lien direct vers la variable $value d’origine, ce qui permet à la fonction de la modifier directement.
Cette technique est particulièrement utile lorsque vous devez faire modifier plusieurs variables par une fonction ou lorsque vous travaillez avec de grandes structures de données pour lesquelles la copie serait inefficace.
Défi
FacileCréez une fonction appelée updateInventory qui prend trois paramètres : une référence vers une variable de quantité, une quantité à ajouter et une quantité à retirer. La fonction doit modifier la quantité d’origine en ajoutant la première quantité et en soustrayant la seconde.
Vous recevrez trois entrées : la quantité initiale, la quantité à ajouter et la quantité à retirer. Lisez les trois entrées, créez une variable contenant la quantité initiale, appelez la fonction updateInventory en lui transmettant la quantité par référence ainsi que les quantités à ajouter et à retirer, puis affichez la quantité mise à jour.
Format d’entrée : Trois lignes : la première ligne contient la quantité initiale (un nombre), la deuxième ligne contient la quantité à ajouter (un nombre), la troisième ligne contient la quantité à retirer (un nombre)
Sortie attendue : La quantité mise à jour après l’ajout et le retrait
Essayez vous-même
<?php
// Lire les entrées
$initialQuantity = intval(fgets(STDIN));
$amountToAdd = intval(fgets(STDIN));
$amountToRemove = intval(fgets(STDIN));
// Créer la variable quantity
$quantity = $initialQuantity;
// TODO: Créer la fonction updateInventory ici qui prend un paramètre par référence
// TODO: Appeler la fonction updateInventory avec quantity par référence
// Afficher la quantité mise à jour
echo $quantity;
?>Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique & Flux
1Fonctions avancées
Fonctions anonymesClosures et 'use'Fonctions fléchéesFonctions de rappelUtilisation de 'call_user_func'Fonctions variablesPassage par référenceFonctions récursivesRécapitulatif : Mélange de fonctions4Tableaux multidimensionnels
Créer un tableau 2DAccéder aux éléments d'un tableau 2DModifier les éléments d'un tableau 2DItérer avec des boucles imbriquéesTableaux associatifs 2DRécapitulatif : Exercice de grille simple2Manipulations avancées de tableaux
Ajouter avec 'array_push'Supprimer avec 'array_pop'Ajouter avec 'array_unshift'Supprimer avec 'array_shift'Fusionner des tableaux indexésFusionner des tableaux associatifsExtraire avec 'array_slice'Valeurs avec 'in_array'Clés avec 'array_search'Récapitulatif : Exercice Playlist3Tri des tableaux
Trier les tableaux indexés par ordre croissantTrier les tableaux indexés par ordre décroissantTrier les tableaux associatifs par valeurTrier les tableaux associatifs par cléTri par ordre naturelTri personnalisé avec 'usort'Récapitulatif : Tri d'un classementEntraînez-vous par vous-même : Compilateur PHP en ligne