Variáveis ​​PHP em funções anônimas

119

Eu estava brincando com funções anônimas em PHP e percebi que elas não parecem atingir variáveis ​​fora delas. Existe alguma maneira de contornar esse problema?

Exemplo:

$variable = "nothing";

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

echo $variable;  //output: "nothing"

Isso produzirá "nada". Existe alguma maneira de a função anônima acessar o $variable?

einord
fonte

Respostas:

277

Sim, use um fecho :

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

Observe que para que você possa modificar $variablee recuperar o valor modificado fora do escopo da função anônima, ele deve ser referenciado no encerramento usando &.

nickb
fonte
É novo! É uma sintaxe nova no PHP 5.3.
Foguete Hazmat
1
@Rocket Então, para ser justo, é a verdadeira sintaxe da função anônima (em oposição a create_function()) e a usepalavra-chave está documentada (mal) na mesma página de documento que as descreve.
DaveRandom de
4
Nota rápida para quem não sabe: Você pode largar o &ao passar um objeto, já que eles são sempre passados ​​por referência ... e não se esqueça da sua dica de tipo :) Ex:function() use (PDO $pdo) {
keyboardSmasher
@Alliswell Não, é apenas para objetos, caso contrário você precisa passar por referência para modificar a variável. Veja este exemplo .
nickb