คอลแบ็กในฟังก์ชันในตัวของ PHP
ใน PHP มีฟังก์ชันในตัวหลายฟังก์ชัน
ที่รับพารามิเตอร์เป็นคอลแบ็ก
เราจะศึกษาหลักการทำงานทั่วไปกับฟังก์ชันเหล่านี้
โดยใช้ตัวอย่างของฟังก์ชัน array_map
ฟังก์ชันนี้รับพารามิเตอร์แรกเป็นคอลแบ็ก
และพารามิเตอร์ที่สองเป็นอาร์เรย์ ฟังก์ชันจะนำคอลแบ็ก
ไปใช้กับแต่ละองค์ประกอบของอาร์เรย์
และส่งคืนอาร์เรย์ที่ถูกเปลี่ยนแปลง
ลองดูตัวเลือกต่างๆ ของการใช้ฟังก์ชันนี้โดยคำนึงถึง ความรู้ที่เราได้รับมาก่อนหน้านี้
ตัวเลือกที่ 1
ดึงรากที่สองจากแต่ละองค์ประกอบของอาร์เรย์
โดยใช้ฟังก์ชันในตัว
sqrt
ในการทำเช่นนี้ ให้ส่งผ่านสตริงที่มีชื่อของฟังก์ชันนี้
เป็นพารามิเตอร์ในฐานะคอลแบ็ก:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map('sqrt', $arr);
var_dump($res);
?>
ตัวเลือกที่ 2
ยกกำลังสองแต่ละองค์ประกอบของอาร์เรย์ โดยใช้ฟังก์ชันธรรมดาที่เราสร้างขึ้นมา ในการทำเช่นนี้ ให้ส่งผ่านสตริงที่มีชื่อของฟังก์ชันนั้น เป็นพารามิเตอร์ในฐานะคอลแบ็ก:
<?php
$arr = [1, 2, 3, 4, 5];
function func($num) {
return $num ** 2;
}
$res = array_map('func', $arr);
var_dump($res);
?>
ตัวเลือกที่ 3
ปรับเปลี่ยนฟังก์ชันของเราให้เป็นฟังก์ชันไม่ระบุชื่อ (anonymous) ที่บันทึกไว้ในตัวแปร:
<?php
$arr = [1, 2, 3, 4, 5];
$func = function ($num) {
return $num ** 2;
};
$res = array_map($func, $arr);
var_dump($res);
?>
ตัวเลือกที่ 4
ส่งผ่านฟังก์ชันไม่ระบุชื่อเป็นพารามิเตอร์:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(function ($num) {
return $num ** 2;
}, $arr);
var_dump($res);
?>
ตัวเลือกที่ 5
ใช้ฟังก์ชันลูกศร (arrow function):
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(fn ($num) => $num ** 2, $arr);
var_dump($res);
?>
ตัวเลือกที่ 6
ให้ระดับกำลัง (เลขชี้กำลัง) ที่ต้อง
นำตัวเลขมายกกำลัง ถูกกำหนดโดยตัวแปรภายนอก
ของคอลแบ็ก ลองใช้ตัวแปรนี้
โดยเข้าถึงมันผ่าน use:
<?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
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(fn ($num) => $num ** $pow, $arr);
var_dump($res);
?>
งานฝึกปฏิบัติ
กำหนดอาร์เรย์ที่มีสตริง แปลงข้อความของแต่ละองค์ประกอบ ของอาร์เรย์เป็นตัวพิมพ์ใหญ่
กำหนดอาร์เรย์ที่มีสตริง กลับข้อความของแต่ละองค์ประกอบ ของอาร์เรย์เพื่อให้ตัวอักษรเรียง ในลำดับย้อนกลับ