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?

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 &.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.