Sisäänrakennetut funktiot ja callbackit PHP:ssä

PHP:ssä on useita sisäänrakennettuja funktioita, jotka ottavat parametrinaan callback-funktioita. Opimme yleisen periaatteen niiden käsittelystä esimerkkinä funktio array_map. Tämä funktio ottaa ensimmäisenä parametrina callback-funktion ja toisena - taulukon. Funktio soveltaa callback-funktiota jokaiseen taulukon elementtiin ja palauttaa muutetun taulukon.

Katsotaan vaihtoehtoja tämän funktion käyttöön ottaen huomioon aiemmat saamamme tiedot.

Vaihtoehto 1

Poimitaan jokaisesta taulukon elementistä neliöjuuri sisäänrakennetun funktion sqrt avulla. Tätä varten parametrina callback-funktiona välitetään merkkijono, jossa on kyseisen funktion nimi:

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

Vaihtoehto 2

Korotetaan jokainen taulukon elementti toiseen potenssiin luomamme tavallisen funktion avulla. Tätä varten parametrina callback-funktiona välitetään merkkijono, jossa on kyseisen funktion nimi:

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

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

Vaihtoehto 3

Muutetaan funktiomme anonyymiksi funktioksi, joka on tallennettu muuttujaan:

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

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

Vaihtoehto 4

Välitetään anonyymi funktio parametrina:

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

Vaihtoehto 5

Käytetään nuolifunktiota:

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

Vaihtoehto 6

Olkoon nyt potenssi, johon luku tulee korottaa, määritelty callback-funktion ulkoisessa muuttujassa. Hyödynnetään tätä muuttujaa saamalla siihen pääsy use-käskyn kautta:

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

Vaihtoehto 7

Kirjoitetaan edellinen koodi uudelleen nuolifunktiona. Nyt muuttuja $pow tulee automaattisesti saataville:

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

Käytännön tehtävät

Задание 1

Annettu taulukko merkkijonoilla. Käännä kunkin elementin teksti suuraakkosiin.

Задание 2

Annettu taulukko merkkijonoilla. Käännä kunkin elementin teksti ympäri niin, että merkit menevät käänteisessä järjestyksessä.