N'oubliez pas que vous pouvez aussi passer ces variables use
par référence.
Les cas d'utilisation sont lorsque vous avez besoin de modifier la variable use
à partir de l'intérieur de votre rappel (par exemple, produire le nouvel ensemble d'objets différents à partir d'un tableau source d'objets).
$sourcearray = [ (object) ['a' => 1], (object) ['a' => 2]];
$newarray = [];
array_walk($sourcearray, function ($item) use (&$newarray) {
$newarray[] = (object) ['times2' => $item->a * 2];
});
var_dump($newarray);
Maintenant, $newarray
comprendra (pseudocode ici pour la brièveté) [{times2:2},{times2:4}]
.
En revanche, utiliser $newarray
sans le modificateur &
rendrait la variable externe $newarray
en lecture seule accessible depuis la portée de la fermeture. Mais $newarray
dans la portée de la fermeture serait une variable nouvelle complètement différente vivant uniquement dans la portée de la fermeture.
Malgré que les noms des deux variables soient les mêmes, il s'agirait de deux variables différentes. La variable extérieure $newarray
comprendrait []
dans ce cas après que le code ait fini.
NB : N'oubliez pas qu'il est préférable d'utiliser les structures de données immuables (contrairement à ce qui précède) dans votre projet web habituel. Cela représenterait 99% des cas d'utilisation. Donc l'approche ci-dessus, en utilisant la mutabilité, est réservée à un type de cas d'utilisation très rare de "niveau bas".