Callback'ai įmontuotose PHP funkcijose

PHP yra keletas įmontuotų funkcijų, kurios parametru priima callback'us. Bendrą jų veikimo principą išmoksime naudodami funkcijos array_map pavyzdį. Ši funkcija pirmu parametru priima callback'ą, o antru - masyvą. Funkcija taiko callback'ą kiekvienam masyvo elementui ir grąžina pakeistą masyvą.

Pažvelkime į šios funkcijos naudojimo variantus atsižvelgdami į anksčiau gautas žinias.

Variantas 1

Paimkime kiekvieno masyvo elemento kvadratinę šaknį naudodami įmontuotą funkciją sqrt. Tam kaip callback'ą parametru perduosime eilutę su šios funkcijos pavadinimu:

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

Variantas 2

Pakelkime kiekvieną masyvo elementą kvadratu naudodami mūsų sukurtą įprastą funkciją. Tam kaip callback'ą parametru perduosime eilutę su šios funkcijos pavadinimu:

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

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

Variantas 3

Paverskime mūsų funkciją anonime funkcija, įrašyta į kintamąjį:

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

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

Variantas 4

Perduokime anoniminę funkciją parametru:

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

Variantas 5

Naudokime rodyklinę funkciją:

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

Variantas 6

Tegul laipsnis, kuriuo reikia pakelti skaičių, nurodomas išoriniu callback'o kintamuoju. Panaudokime šį kintamąjį, gautę prieigą prie jo per 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);
?>

Variantas 7

Perrašykime ankstesnį kodą naudodami rodyklinę funkciją. Dabar kintamasis $pow bus prieinamas automatiškai:

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

Praktinės užduotys

Задание 1

Duotas masyvas su eilutėmis. Paverskite kiekvieno elemento tekstą didžiosiomis raidėmis.

Задание 2

Duotas masyvas su eilutėmis. Apverskite kiekvieno elemento tekstą taip, kad simboliai eitų atvirkštine tvarka.