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 passez une variable à une fonction en PHP, la fonction reçoit une copie de la valeur de cette variable. Cela signifie que toute modification effectuée à l'intérieur de la fonction n'affecte pas la variable d'origine à l'extérieur 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 au lieu d'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 retourné de la fonction. Le paramètre &$number crée un lien direct vers la variable $value d'origine, permettant à la fonction de la modifier directement.
Cette technique est particulièrement utile lorsque vous avez besoin qu'une fonction modifie plusieurs variables ou lorsque vous travaillez avec de grandes structures de données où la copie serait inefficace.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Défi
FacileCréez une fonction appelée updateInventory qui prend trois paramètres : une référence à une variable de quantité, un montant à ajouter et un montant à retirer. La fonction doit modifier la quantité d'origine en ajoutant le premier montant et en soustrayant le second montant.
Vous recevrez trois entrées : la quantité initiale, le montant à ajouter et le montant à retirer. Lisez les trois entrées, créez une variable avec la quantité initiale, appelez la fonction updateInventory en passant la quantité par référence ainsi que les montants à ajouter et à retirer, et 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 le montant à ajouter (un nombre), la troisième ligne contient le montant à retirer (un nombre)
Sortie attendue : La quantité mise à jour après l'ajout et le retrait
Aide-mémoire
Par défaut, PHP passe les variables aux fonctions par valeur (une copie). Pour modifier la variable originale, utilisez le passage par référence en ajoutant une esperluette (&) avant le nom du paramètre :
<?php
function doubleValue(&$number) {
$number = $number * 2;
}
$value = 10;
doubleValue($value);
echo $value; // Affiche : 20
?>Le paramètre &$number crée un lien direct vers la variable originale, permettant à la fonction de la modifier sans retourner de valeur. Ceci est utile pour modifier plusieurs variables ou travailler efficacement avec de grandes structures de données.
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 de quantité
$quantity = $initialQuantity;
// TODO : Créer la fonction updateInventory ici qui prend un paramètre par référence
// TODO : Appeler la fonction updateInventory avec la quantité 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 classement