Коллбэкҳо дар функсияҳои дарунсохти PHP

Дар PHP як қатор функсияҳои дарунсохт мавҷуданд, ки параметрҳо коллбэкҳоро қабул мекунанд. Принсипи умумии кор бо онҳоро мо меомӯзем дар мисоли функсияи array_map. Ин функсия параметри аввал коллбэкро қабул мекунад, ва дуюм - массив. Функсия коллбэкро ба ҳар як элемент массива месупорад ва массиви тағйирёфтаро бармегардонад.

Биёед ба вариантҳои истифодаи ин функсия бо назардошти донишҳои пештараи мо нигарем.

Варси 1

Аз ҳар як элементи массив решаи квадратӣ гирем бо ёрии функсияи дарунсохти sqrt. Барои ин ҳамчун коллбэк параметр сатр бо номи ин функсияро мефиристем:

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

Варси 2

Ҳар як элементи массивро ба квадрат мебардорем бо ёрии функсияи сохтаи мо. Барои ин ҳамчун коллбэк параметр сатр бо номи ин функсияро мефиристем:

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

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

Варси 3

Функсияи худро ба функсияи бе ном табдил медиҳем, ки дар тағирёбанда сабт шудааст:

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

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

Варси 4

Функсияи бе номро ҳамчун параметр мефиристем:

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

Варси 5

Функсияи тиршаклро истифода мебарем:

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

Варси 6

Бигзор дараҷае, ки ба рақам бардошта мешавад, бо тағирёбандаи берунаи коллбэк муқаррар карда шавад. Ба ин тағирёбанда дастрасӣ пайдо кунем, аз роҳи 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);
?>

Варси 7

Коди қаблиро бо функсияи тиршакл аз нависем. Ҳоло тағирёбандаи $pow ба таври худкор дастрас хоҳад буд:

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

Масъалаҳои амалӣ

Задание 1

Массив бо сатрҳо дода шудааст. Матни ҳар як элементи массивро ба регистри болоӣ тарҷума кунед.

Задание 2

Массив бо сатрҳо дода шудааст. Матни ҳар як элементи массивро баргардонед, то аломатҳо дар самти баръакс гузаранд.