บทนำ
Anonymous function คือฟังก์ชันที่ไม่มีชื่อที่ผู้ใช้กำหนด ฟังก์ชันแบบนี้เรียกอีกอย่างว่า closure หรือ lambda function บางครั้งคุณอาจต้องการฟังก์ชันสำหรับใช้ครั้งเดียว Closure คือ anonymous function ที่ปิด (closes) บนสภาพแวดล้อมที่มันถูกกำหนด ต้องระบุคีย์เวิร์ด use ในมัน การใช้งานที่พบบ่อยที่สุดของ anonymous function คือการสร้าง inline callback function
รูปแบบไวยากรณ์
$var=function ($arg1, $arg2) { return $val; };
- ไม่มีชื่อฟังก์ชันระหว่างคีย์เวิร์ด function และวงเล็บเปิด
- มี semicolon หลังการกำหนดฟังก์ชัน เพราะ anonymous function definitions เป็นนิพจน์ (expressions)
- ฟังก์ชันถูกมอบหมายให้ตัวแปร และเรียกใช้ภายหลังด้วยชื่อตัวแปร
- เมื่อส่งให้ฟังก์ชันอื่นที่จะเรียกภายหลัง เรียกว่า callback
- คืนค่าจากภายในฟังก์ชันภายนอก เพื่อให้เข้าถึงตัวแปรของฟังก์ชันภายนอกได้ เรียกว่า closure
ตัวอย่าง Anonymous function
ตัวอย่าง
<?php $var = function ($x) {return pow($x,3);}; echo "cube of 3 = " . $var(3); ?>
ผลลัพธ์
cube of 3 = 27
Anonymous function เป็น callback
ในตัวอย่างต่อไปนี้ anonymous function ถูกใช้เป็นอาร์กิวเมนต์สำหรับฟังก์ชันในตัว usort() usort() เรียงลำดับอาร์เรย์ที่ให้มาโดยใช้ฟังก์ชันเปรียบเทียบ
ตัวอย่าง
<?php $arr = [10,3,70,21,54]; usort ($arr, function ($x , $y) { return $x > $y; }); foreach ($arr as $x){ echo $x . "\n"; } ?>
ผลลัพธ์
3 10 21 54 70
Anonymous function เป็น closure
Closure ยังเป็น anonymous function ที่เข้าถึงตัวแปรนอกขอบเขตได้ด้วยคีย์เวิร์ด use
ตัวอย่าง
<?php $maxmarks=300; $percent=function ($marks) use ($maxmarks) {return $marks*100/$maxmarks;}; echo "marks=285 percentage=". $percent(285); ?>
ผลลัพธ์
marks=285 percentage=95