ฟังก์ชันเรียกกลับของ PHP
ฟังก์ชั่นการโทรกลับ
ฟังก์ชันเรียกกลับ (มักเรียกว่า "เรียกกลับ") เป็นฟังก์ชันที่ส่งผ่านเป็นอาร์กิวเมนต์ไปยังฟังก์ชันอื่น
ฟังก์ชันที่มีอยู่สามารถใช้เป็นฟังก์ชันเรียกกลับได้ ในการใช้ฟังก์ชันเป็นฟังก์ชันเรียกกลับ ให้ส่งสตริงที่มีชื่อของฟังก์ชันเป็นอาร์กิวเมนต์ของฟังก์ชันอื่น:
ตัวอย่าง
ส่งการเรียกกลับไปยังฟังก์ชันของ PHP array_map()
เพื่อคำนวณความยาวของทุกสตริงในอาร์เรย์:
<?php
function my_callback($item) {
return strlen($item);
}
$strings = ["apple", "orange",
"banana", "coconut"];
$lengths =
array_map("my_callback", $strings);
print_r($lengths);
?>
ตั้งแต่เวอร์ชัน 7 เป็นต้นไป PHP สามารถส่งฟังก์ชันที่ไม่ระบุตัวตนเป็นฟังก์ชันเรียกกลับได้:
ตัวอย่าง
ใช้ฟังก์ชันที่ไม่ระบุชื่อเป็นการเรียกกลับสำหรับarray_map()
ฟังก์ชันของ PHP:
<?php
$strings = ["apple", "orange", "banana", "coconut"];
$lengths =
array_map( function($item) { return strlen($item); } , $strings);
print_r($lengths);
?>
การเรียกกลับในฟังก์ชันที่กำหนดโดยผู้ใช้
ฟังก์ชันและเมธอดที่ผู้ใช้กำหนดสามารถใช้ฟังก์ชันเรียกกลับเป็นอาร์กิวเมนต์ได้ ในการใช้ฟังก์ชันเรียกกลับภายในฟังก์ชันหรือเมธอดที่ผู้ใช้กำหนด ให้เรียกโดยเพิ่มวงเล็บให้กับตัวแปรและส่งผ่านอาร์กิวเมนต์เหมือนกับฟังก์ชันปกติ:
ตัวอย่าง
เรียกใช้การเรียกกลับจากฟังก์ชันที่ผู้ใช้กำหนด:
<?php
function exclaim($str) {
return $str . "! ";
}
function ask($str) {
return $str . "? ";
}
function
printFormatted($str, $format) {
// Calling the $format callback
function
echo $format($str);
}
// Pass "exclaim" and "ask" as callback
functions to printFormatted()
printFormatted("Hello world", "exclaim");
printFormatted("Hello world", "ask");
?>