คอลแบ็กในฟังก์ชันในตัวของ 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

ปรับเปลี่ยนฟังก์ชันของเราให้เป็นฟังก์ชันไม่ระบุชื่อ (anonymous) ที่บันทึกไว้ในตัวแปร:

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

ใช้ฟังก์ชันลูกศร (arrow function):

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

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