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<?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<?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<?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<?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<?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<?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<?php
  $arr = [1, 2, 3, 4, 5];
  $pow = 3;
  
  $res = array_map(fn ($num) => $num ** $pow, $arr);
  var_dump($res);
?>

Tarefas práticas

Задание 1

Dado um array de strings. Converta o texto de cada elemento do array para maiúsculas.

Задание 2

Dado um array de strings. Inverta o texto de cada elemento do array para que os caracteres fiquem em ordem reversa.