Funcțiile callback în funcțiile încorporate în PHP
În PHP există o serie de funcții încorporate,
care acceptă funcții callback ca parametru.
Vom studia principiul general de lucru cu ele
folosind ca exemplu funcția array_map.
Această funcție acceptă ca prim parametru
un callback, iar ca al doilea - un array. Funcția aplică
callback-ul fiecărui element al array-ului
și returnează array-ul modificat.
Să ne uităm la opțiunile de utilizare a acestei funcții ținând cont de cunoștințele noastre anterioare.
Opțiunea 1
Să extragem rădăcina pătrată din fiecare element al array-ului
folosind funcția încorporată
sqrt.
Pentru aceasta, ca parametru callback vom transmite
un șir cu numele acestei funcții:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map('sqrt', $arr);
var_dump($res);
?>
Opțiunea 2
Să ridicăm fiecare element al array-ului la pătrat folosind o funcție obișnuită creată de noi. Pentru aceasta, ca parametru callback vom transmite un șir cu numele acestei funcții:
<?php
$arr = [1, 2, 3, 4, 5];
function func($num) {
return $num ** 2;
}
$res = array_map('func', $arr);
var_dump($res);
?>
Opțiunea 3
Să modificăm funcția noastră într-una anonimă, scrisă într-o variabilă:
<?php
$arr = [1, 2, 3, 4, 5];
$func = function ($num) {
return $num ** 2;
};
$res = array_map($func, $arr);
var_dump($res);
?>
Opțiunea 4
Să transmitem funcția anonimă ca parametru:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(function ($num) {
return $num ** 2;
}, $arr);
var_dump($res);
?>
Opțiunea 5
Să folosim o funcție arrow:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(fn ($num) => $num ** 2, $arr);
var_dump($res);
?>
Opțiunea 6
Să presupunem că puterea la care trebuie
să ridicăm numărul, este dată de o variabilă externă
callback-ului. Să folosim această variabilă,
obținând acces la ea prin 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țiunea 7
Să rescriem codul anterior folosind o funcție arrow.
Acum variabila $pow
va fi disponibilă automat:
<?php
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(fn ($num) => $num ** $pow, $arr);
var_dump($res);
?>
Probleme practice
Este dat un array cu șiruri. Traduceți textul fiecărui element al array-ului în majuscule.
Este dat un array cu șiruri. Inversați textul fiecărui element al array-ului astfel încât caracterele să meargă în ordine inversă.