PHP-de käýiriji funksiýalar

Käýiriji funksiýa, başga bir funksiýa parametr hökmünde berilýän funksiýa bolup durýar.

Geliň mysal üsti bilen seredeliň. Bizde bir funksiýa bolsun, ol birinji parametr hökmünde san, ikinji parametr hökmünde bolsa käýiriji funksiýa kabul etsin:

php<?php
  function func($num, $calb)
  {
    
  }
?>

Funksiýanyň içinde käýiriji funksiýanyň berlen san üçin çagyrylmagyny üpjün edeliň:

php<?php
  function func($num, $calb)
  {
    echo $calb($num);
  }
?>

Indi bizde käýiriji funksiýany funksiýamyza bermegiň nähili wariantlary bar bolup bilýändigine seredeliň.

Wariant 1

Bizim käýiriji funksiýamyz adaty funksiýa bolup biler:

php<?php
  function calb($num) {
    return $num ** 2;
  }
?>

Bu ýagdaýda käýiriji hökmünde biz öz funksiýamyzyň adyny bereris:

php<?php
  func(3, 'calb');
?>

func funksiýasynyň içinde bizim käýiriji funksiýamyz ady boýunça çagyrylar.

Wariant 2

Bizim käýiriji funksiýamyz anonim funksiýa, üýtgeýjide ýazylan bolup biler:

php<?php
  $calb = function($num) {
    return $num ** 2;
  };
?>

Bu ýagda biz parametr hökmünde funksiýa bilen üýtgeýjimizi berýäris:

php<?php
  func(3, $calb);
?>

Wariant 3

Anonim funksiýany derrew parametr hökmünde bermek mümkindir:

php<?php
  func(3, function($num) {
    return $num ** 2;
  });
?>

Wariant 4

Ok funksiýasyny ulanyp, kody gysgaltmak mümkindir:

php<?php
  func(3, fn($num) => $num ** 2);
?>

Amaly wezipeler

Задание 1

Massiw we her bir massiw elementine ulanylar käýiriji funksiýany parametr hökmünde kabul edýän funksiýa berlen:

php<?php
  function func($arr, $calb)
  {
    $res = [];
    
    foreach ($arr as $elem) {
      $res[] = $calb($elem);
    }
    
    return $res;
  }
?>

Bu funksiýany, parametr hökmünde sanlar bilen massiw we berlen sany kwadrata göterýän käýiriji funksiýany berip, çagyryň.