Callbacks em funções embutidas no PHP
O PHP possui uma série de funções embutidas
que aceitam callbacks como parâmetro.
Vamos aprender o princípio geral de trabalho com elas
usando a função array_map como exemplo.
Esta função aceita um callback como primeiro parâmetro
e um array como segundo. A função aplica o
callback a cada elemento do array
e retorna o array modificado.
Vamos dar uma olhada nas opções de uso desta função, considerando o conhecimento que adquirimos anteriormente.
Opção 1
Vamos extrair a raiz quadrada de
cada elemento do array usando a função
embutida
sqrt.
Para isso, passaremos uma string
com o nome desta função como parâmetro de callback:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map('sqrt', $arr);
var_dump($res);
?>
Opção 2
Vamos elevar cada elemento do array ao quadrado usando uma função comum que criamos. Para isso, passaremos uma string com o nome desta função como parâmetro de callback:
<?php
$arr = [1, 2, 3, 4, 5];
function func($num) {
return $num ** 2;
}
$res = array_map('func', $arr);
var_dump($res);
?>
Opção 3
Vamos converter nossa função para anônima, atribuindo-a a uma variável:
<?php
$arr = [1, 2, 3, 4, 5];
$func = function ($num) {
return $num ** 2;
};
$res = array_map($func, $arr);
var_dump($res);
?>
Opção 4
Vamos passar a função anônima diretamente como parâmetro:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(function ($num) {
return $num ** 2;
}, $arr);
var_dump($res);
?>
Opção 5
Vamos usar uma arrow function:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(fn ($num) => $num ** 2, $arr);
var_dump($res);
?>
Opção 6
Suponha que a potência à qual o número
deve ser elevado seja definida por uma variável externa
ao callback. Vamos usar esta variável,
obtendo acesso a ela através de use:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(function ($num) use ($pow) {
return $num ** $pow;
}, $arr);
var_dump($res);
?>
Opção 7
Vamos reescrever o código anterior usando uma arrow function.
Agora a variável $pow
estará automaticamente disponível:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(fn ($num) => $num ** $pow, $arr);
var_dump($res);
?>
Tarefas práticas
Dado um array de strings. Converta o texto de cada elemento do array para maiúsculas.
Dado um array de strings. Inverta o texto de cada elemento do array para que os caracteres fiquem em ordem reversa.