Variables PHP dans les fonctions anonymes

119

Je jouais avec des fonctions anonymes en PHP et je me suis rendu compte qu'elles ne semblaient pas atteindre des variables en dehors d'elles. Existe-t-il un moyen de contourner ce problème?

Exemple:

$variable = "nothing";

functionName($someArgument, function() {
  $variable = "something";
});

echo $variable;  //output: "nothing"

Cela ne produira "rien". Est-il possible que la fonction anonyme puisse accéder au $variable?

einord
la source

Réponses:

277

Oui, utilisez une fermeture :

functionName($someArgument, function() use(&$variable) {
  $variable = "something";
});

Notez que pour que vous puissiez modifier $variableet récupérer la valeur modifiée en dehors de la portée de la fonction anonyme, elle doit être référencée dans la fermeture en utilisant &.

nickb
la source
C'est nouveau! C'est la syntaxe qui est nouvelle dans PHP 5.3.
Rocket Hazmat
1
@Rocket Donc, pour être honnête, c'est la vraie syntaxe des fonctions anonymes (par opposition à create_function()) et le usemot-clé est (mal) documenté sur la même page doc qui les décrit.
DaveRandom
4
Note rapide pour ceux qui ne le savent peut-être pas: vous pouvez laisser tomber le &lors du passage d'un objet, car ils sont toujours passés par référence ... et n'oubliez pas votre indice de type :) Ex:function() use (PDO $pdo) {
keyboardSmasher
@Alliswell Non, c'est uniquement pour les objets, sinon il faut passer par référence pour modifier la variable. Voyez cet exemple .
nickb