Tagasikutset PHP sisseehitatud funktsioonides

PHP-s on mitmeid sisseehitatud funktsioone, mis parameetrina võtavad vastu tagasikutseid. Nende üldist tööpõhimõtet uurime funktsiooni array_map näitel. See funktsioon võtab esimese parameetrina vastu tagasikutse ja teise parameetrina - massiivi. Funktsioon rakendab tagasikutset iga massiivi elemendi kohta ja tagastab muudetud massiivi.

Vaatame selle funktsiooni kasutamise võimalusi võttes arvesse varasematel aegadel saadud teadmisi.

Variant 1

Võtame igast massiivi elemendist ruutjuure, kasutades selleks sisseehitatud funktsiooni sqrt. Selleks edastame parameetrina tagasikutse stringina selle funktsiooni nimega:

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

Variant 2

Tõstame iga massiivi elemendi ruutu meie poolt loodud tavalise funktsiooni abil. Selleks edastame parameetrina tagasikutse stringina selle funktsiooni nimega:

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

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

Variant 3

Muudame oma funktsiooni anonüümseks, kirjutades selle muutujasse:

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

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

Variant 4

Edastame anonüümse funktsiooni parameetrina:

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

Variant 5

Kasutame noolfunktsiooni:

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

Variant 6

Olgu nüüd aste, millesse tuleb arv tõsta, määratud tagasikutse välimise muutujaga. Kasutame seda muutujat, saades sellele juurdepääsu läbi 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);
?>

Variant 7

Kirjutame eelmise koodi ümber noolfunktsiooni abil. Nüüd on muutuja $pow automaatselt kättesaadav:

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

Praktilised ülesanded

Задание 1

Antud on stringide massiiv. Teisendage iga massiivi elemendi tekst suurte tähtedega.

Задание 2

Antud on stringide massiiv. Pöörake iga massiivi elemendi tekst ümber nii, et sümbolid läheksid vastupidises järjekorras.