Callbacki we wbudowanych funkcjach w PHP

W PHP istnieje szereg wbudowanych funkcji, które przyjmują callbacki jako parametr. Ogólną zasadę pracy z nimi poznamy na przykładzie funkcji array_map. Ta funkcja przyjmuje jako pierwszy parametr callback, a jako drugi - tablicę. Funkcja stosuje callback do każdego elementu tablicy i zwraca zmodyfikowaną tablicę.

Przyjrzyjmy się opcjom użycia tej funkcji, uwzględniając wiedzę, którą wcześniej zdobyliśmy.

Opcja 1

Pobierzmy pierwiastek kwadratowy z każdego elementu tablicy za pomocą wbudowanej funkcji sqrt. Aby to zrobić, jako callback przekażemy parametrem ciąg znaków z nazwą tej funkcji:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  $res = array_map('sqrt', $arr);
  var_dump($res);
?>

Opcja 2

Podnieśmy każdy element tablicy do kwadratu za pomocą utworzonej przez nas zwykłej funkcji. Aby to zrobić, jako callback parametrem przekażemy ciąg znaków z nazwą tej funkcji:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  function func($num) {
    return $num ** 2;
  }

  $res = array_map('func', $arr);
  var_dump($res);
?>

Opcja 3

Przekształćmy naszą funkcję na funkcję anonimową, zapisaną w zmiennej:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  $func = function ($num) {
    return $num ** 2;
  };

  $res = array_map($func, $arr);
  var_dump($res);
?>

Opcja 4

Przekażmy funkcję anonimową parametrem:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  $res = array_map(function ($num) {
    return $num ** 2;
  }, $arr);
  
  var_dump($res);
?>

Opcja 5

Użyjmy funkcji strzałkowej:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  $res = array_map(fn ($num) => $num ** 2, $arr);
  var_dump($res);
?>

Opcja 6

Niech teraz potęga, do której trzeba podnieść liczbę, będzie określona przez zewnętrzną zmienną callbacka. Skorzystajmy z tej zmiennej, uzyskując do niej dostęp poprzez 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);
?>

Opcja 7

Przepiszmy poprzedni kod za pomocą funkcji strzałkowej. Teraz zmienna $pow będzie dostępna automatycznie:

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

Zadania praktyczne

Задание 1

Dana jest tablica z ciągami znaków. Przetłumacz tekst każdego elementu tablicy na wielkie litery.

Задание 2

Dana jest tablica z ciągami znaków. Odwróć tekst każdego elementu tablicy tak, aby znaki szły w odwrotnej kolejności.