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
$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
$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
$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
$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
$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
$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
$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
Annettu taulukko merkkijonoilla. Käännä kunkin elementin teksti suuraakkosiin.
Annettu taulukko merkkijonoilla. Käännä kunkin elementin teksti ympäri niin, että merkit menevät käänteisessä järjestyksessä.