ฟังก์ชันคอลแบ็กใน PHP

คอลแบ็ก คือฟังก์ชัน ที่ถูกส่งผ่านเป็นพารามิเตอร์ไปยังฟังก์ชันอื่น

ลองดูตัวอย่าง สมมติว่าเรามีฟังก์ชันที่ รับพารามิเตอร์แรกเป็นตัวเลข และพารามิเตอร์ที่สองเป็นคอลแบ็ก:

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

มาทำให้ภายในฟังก์ชัน คอลแบ็กของเราถูกเรียกใช้สำหรับตัวเลขที่ส่งมา

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

ตอนนี้เรามาดูว่ามี ตัวเลือกใดบ้างในการส่งคอลแบ็กไปยังฟังก์ชันของเรา

ตัวเลือกที่ 1

คอลแบ็กของเราสามารถเป็น ฟังก์ชันทั่วไป:

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

ในกรณีนี้ ในฐานะคอลแบ็ก เราจะส่งชื่อของฟังก์ชันของเรา:

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

ภายในฟังก์ชัน func คอลแบ็กของเราจะถูกเรียกโดยใช้ชื่อ

ตัวเลือกที่ 2

คอลแบ็กของเราสามารถเป็นฟังก์ชันที่ไม่ระบุชื่อ ที่เก็บไว้ในตัวแปร:

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

ในกรณีนี้ เราส่งพารามิเตอร์เป็น ตัวแปรที่มีฟังก์ชันของเรา:

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

ตัวเลือกที่ 3

สามารถส่งฟังก์ชันที่ไม่ระบุชื่อ เป็นพารามิเตอร์ได้ทันที:

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

ตัวเลือกที่ 4

สามารถย่อโค้ดได้โดยใช้ ฟังก์ชันลูกศร:

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

โจทย์ปฏิบัติ

Задание 1

กำหนดฟังก์ชันที่รับพารามิเตอร์เป็น อาร์เรย์และคอลแบ็ก ซึ่งจะถูกนำไปใช้ กับแต่ละองค์ประกอบของอาร์เรย์:

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

เรียกใช้ฟังก์ชันนี้ โดยส่งพารามิเตอร์ เป็นอาร์เรย์ที่มีตัวเลขและคอลแบ็ก ที่ยกกำลังสองของตัวเลขที่ส่งมา