Você sabe algo sobre fechamentos em php. PHP: funções anônimas

A Wikipedia diz que uma função anônima é uma função que pode existir sem um identificador. Parece muito interessante! Neste tutorial, mostrarei alguns exemplos de como você pode criar e chamar uma função com métodos não padrão.

Vamos começar imediatamente com exemplos:

Teste de função ($ var) (echo "Este é $ var";)

Isto é muito função simples... Agora, além da chamada usual, podemos executar esta função usando uma variável que armazena o nome desta função. Algo assim:

$ f = "Teste"; $ f ("função variável");

Se você executar o código, verá a mensagem Esta é uma função variável. Para sua informação, lidar com aspas simples é mais rápido do que aspas duplas.

Podemos usar essa técnica em OOP também. Exemplo de php.net:

Classe Foo (function Variable () ($ name = "Bar"; $ this -> $ name (); // Isso chama o método Bar ()) função Bar () (echo "This is Bar";)) $ foo = novo Foo (); $ funcname = "Variável"; $ foo -> $ funcname (); // Isso chama $ foo-> Variable ()

Este conceito é bastante interessante. Ele pode ser usado para implementar retornos de chamada, tabelas de função e assim por diante.

Agora tentarei explicar a você o que são funções anônimas:

$ input = array (1, 2, 3, 4, 5); $ output = array_filter ($ input, function ($ v) (return $ v> 2;));

function ($ v) (return $ v> 2;) é uma função anônima. Também podemos atribuí-lo a uma variável para uso posterior.

$ max = função ($ v) (retornar $ v> 2;); $ input = array (1, 2, 3, 4, 5); $ output = array_filter ($ input, $ max);

Agora vamos nos familiarizar com a nova palavra-chave de uso. Vamos escrever outra função anônima para isso (funciona com PHP 5.3):

$ max_comp = function ($ max) (return function ($ v) use ($ max) (return $ v> $ max;);); $ input = array (1, 2, 3, 4, 5); $ output = array_filter ($ input, $ max_comp (2));

Neste exemplo, estamos usando o efeito de ajuste com a palavra-chave use. Essa técnica permite que uma função anônima acesse variáveis ​​externas. Existe uma brisa de programação procedural?

Aqui está outro exemplo mais simples:

$ string = "Olá, mundo!"; $ closure = function () use ($ string) (echo $ string;); $ closure ();

Como eu disse, as variáveis ​​que queremos usar (do escopo global) em tais funções devem ser passadas por uso. É importante observar que apenas o valor é passado por padrão, então se você quiser alterar o conteúdo da variável passada e quiser que ela seja alterada fora da função anônima, passe o valor em:

$ x = 1; $ closure = function () use (& $ x) (++ $ x;); echo $ x. "
"; $ closure (); echo $ x."
"; $ closure (); echo $ x."
";

Neste exemplo, nosso método altera o conteúdo da variável $ x cada vez que a função anônima é chamada. Se não tivéssemos passado o endereço da variável e a própria variável, teríamos a saída de três 1s.

A verdadeira beleza do encerramento é que ele não confunde o namespace global. Assim que a função anônima executa a ação, todas as variáveis ​​usadas nela são destruídas automaticamente.

Olá a todos e hoje falaremos sobre o que são funções anônimas em php e onde usá-los.

Funções anônimas, ou de outra forma funções lambda são funções que não têm nome.

Um exemplo de uma função regular

função FuName ($ txt) (
echo "Meu texto:". $ txt;
}

$ func = "FuName";
$ func ("Meu texto");
?>

Temos uma função que leva um parâmetro. Em seguida, escrevemos o nome da função em uma variável e a chamamos. Nada incomum. EM OOP estilo será mais justificado.

class MyClass (
barra de funções () (
// código
}
}

$ class = new MyClass ();
$ func = "bar";
$ classe -> $ func ();
?>

Funções anônimas

Se você estiver familiarizado com funções anônimas da linguagem JavaScript, então você entende por que eles são necessários e, se não, então continue a ler.

Para chamar nossa função anônima em algum lugar mais além no código do programa, podemos atribuí-la a uma variável

$ func = function () (
// código
};

$ func ();
?>

Observe que no final há ; desde atribuímos à variável um valor igual à função. Mas a questão toda não está nisso, mas no fato de que podemos usar essas funções como funções de retorno de chamada... Por exemplo:

$ val = array_filter ($ input, function ($ v) (return $ v> 2;));
?>

USE palavra-chave

De novo se você souber JavaScript então isso não será um problema para você. Palavra-chave USAR permite que você use a técnica fechamentos, ou seja, com sua ajuda podemos alcançar variáveis ​​externas.

$ mx = função ($ high_val) (
função de retorno ($ val) uso ($ high_val) (
return $ val> $ high_val;
};
};

$ i = matriz (1, 2, 3, 4, 5, 6, 7);
$ o = array_filter ($ input, $ max_comp (2));
?>

Aqui estamos nós dentro do nosso funções lambda use uma variável global high_val... Para que isso seja possível, devemos após a palavra função e os parâmetros entre parênteses escrevem usar e passe aí o nome da variável externa que queremos usar dentro do código da função.

No entanto, não podemos alterar o valor de nossa variável global dessa forma. Para fazer isso, você precisa indicar o sinal na frente de seu nome &

$ name = "Brian";
$ setName = function ($ n) use (& $ name) (
$ name = $ n;
};

$ setName ("David");
echo $ name;
?>

Conclusão

Então hoje você descobriu o que são funções anônimas em php e como usá-las... Boa sorte!

Uma função pode ser atribuída a uma variável como um valor normal. Para fazer isso, o nome da função deve ser atribuído à variável como uma string, mas sem os parênteses:

\ n ";) $ my_func =" foo "; // Agora podemos executar a função foo () usando a variável $ my_func, // que armazena o nome da função especificada como uma string $ my_func (); // Chamar a função foo ()?>

Este conceito de PHP é chamado de variáveis ​​de função. Consiste no fato de que se você adicionar parênteses à variável no final, o interpretador PHP irá primeiro verificar se uma função com um nome igual a significado variável e se houver tal função, ele irá executá-la.

Portanto, conforme mostrado no exemplo acima, você só pode fazer com funções específicas para usuários. Construções e funções de linguagem integradas, como echo, unset (), isset () e outras como elas, não podem ser atribuídas diretamente a variáveis ​​da mesma maneira. Mas você pode fazer sua própria função de invólucro para que as construções de linguagem integradas possam funcionar como funções personalizadas.

Funções anônimas

Função anônima- uma função que não tem seu próprio nome, às vezes você pode encontrar outro nome para tais funções - uma função lambda. Funções anônimas podem ser passadas para outras funções como argumentos ou atribuídas a variáveis ​​como valores normais:

Preste atenção ao exemplo, no final da definição da função há um ponto e vírgula, já que uma função anônima é inerentemente um valor, e atribuímos um valor a uma variável, então no final, como para as instruções comuns, um ponto e vírgula é colocado .

As funções anônimas diferem das funções nomeadas porque são criadas apenas no momento em que a execução as atinge, portanto, só podem ser usadas depois de definidas: