Nesta aula entenderemos o escopo de nomes das funções anonimas, bem como as suas características e principais conceitos. |
ESCOPO DE NOME DAS FUNÇÕES ANÔNIMAS
Quando declaramos uma função anônima, geralmente, iremos atribuir a mesma a uma variável. A variável servirá como uma espécie de referência, até porque, através dessa variável é que poderemos invocar a função, ou melhor, somente com essa variável é que o bloco de código da função anonima poderá ser executado!
Uma função anônima possui o seu escopo restrito, então, não é possível fazer acesso direto aos membros externos. Em suma, o escopo de uma função anônima funciona de maneira análoga a de uma função convencional.
Dessa forma, para acessarmos variáveis externas a função anônima, temos que explicitamente declarar, no cabeçalho da função, que determinadas variáveis devem estar visíveis dentro da função que estamos definindo.
Para que seja possível essa manipulação no escopo das variáveis, foi definido a instrução use
que funciona como complemento da declaração das funções anonimas, por exemplo:
$x = 10;
$func = function() use ($x) {
echo "O valor de x é: $x";
};
$func();
No código acima, declaramos uma variável de nome $x
e inicializamo-a com o número inteiro 10. Em seguida, definimos uma função anonima e nesta declaramos, com a instrução use
, que a variável $x
deve estar acessível internamente.
Por essa razão é que conseguimos acessar a variável $x
, até porque, por padrão, funções anonimas não possuem acesso aos membros externos, como já estudado.
PASSAGEM DE REFERÊNCIA E DE VALOR
Funções anonimas funcionam de maneira análoga a qualquer outra função, logo, estas possuem o escopo restrito. Da mesma forma, temos que ao inserirmos variáveis no escopo de uma função, o que estamos de fato fazendo, é declarando uma variável de mesmo nome e inicializando-a com o valor igual a variável externa.
Desta forma, se alterarmos o valor das variáveis inseridas no escopo local, o que será alterado, é só e somente só a variável de mesmo nome re-declarada no escopo local da função anonima. Logo, se desejarmos alterar a variável cujo escopo é externo a função, temos de passar a sua referência e não o seu valor. Para isso, basta precedermos o seu nome pelo uso de um & comercial.
Vejamos o código a seguir:
$x = 10;
$y = 10;
$func = function() use ($x, &$y) {
echo "O valor de x é: $x";
echo "O valor de y é: $y";
$x = 0;
$y = 0;
};
$func();
echo "-----";
echo "O valor de x é: $x";
echo "O valor de y é: $y";
No exemplo acima, podemos facilmente observar que somente a variável externa $y
é que teve o seu valor alterado, isso porque, a referência da mesma foi inserida no escopo local da função anonima.
A seguir, implementamos mais um exemplo para avançarmos ainda mais em nosso estudo.
$var1 = 10;
$num = ["um", "dois", "três"];
$func = function() use ($var1, &$num) {
echo "Variável externa $var1";
};
$func();
EXEMPLO FEITO EM AULA
#FUNÇÕES ANÔNIMAS - ESCOPO DE NOMES
$num = 100;
$num2 = 100;
$func = function() use(&$num, $num2) {
// echo "Anônima: " . $num;
$num = 1500;
};
$func();
echo $num;
Tags curso, php, use, função, função anonima, lambda, closures, função lambda, função de primeira ordem, função de ordem superior, blog
Comentários
comments powered by Disqus