ฟังก์ชันไม่ระบุชื่อและโคลสเชอร์
เขียนฟังก์ชันในบรรทัดและจับตัวแปรด้วย use
ฟังก์ชันไม่ระบุชื่อและโคลสเชอร์ เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
ฟังก์ชันไม่ระบุชื่อคืออะไร
ฟังก์ชันไม่ระบุชื่อ (แลมบ์ดา) คือฟังก์ชันที่ไม่มีชื่อ ใน PHP ฟังก์ชันนี้เป็นอินสแตนซ์ของคลาส Closure ในตัว และสามารถเก็บไว้ในตัวแปร ส่งเป็นอาร์กิวเมนต์ หรือส่งกลับจากฟังก์ชันอื่นได้
ฟังก์ชันไม่ระบุชื่อพื้นฐาน
กำหนดฟังก์ชันให้กับตัวแปรแล้วเรียกใช้:
<?php
$double = function(int $n): int {
return $n * 2;
};
echo $double(5); // 10
echo $double(21); // 42การส่งฟังก์ชันไม่ระบุชื่อ
ส่งคลอเชอร์เป็นอาร์กิวเมนต์ให้ฟังก์ชันอย่าง array_map, usort หรือฟังก์ชันเรียกกลับของคุณเอง:
<?php
$nums = [3, 1, 4, 1, 5, 9];
$squared = array_map(function(int $n): int {
return $n ** 2;
}, $nums);
print_r($squared); // [9, 1, 16, 1, 25, 81]การส่งกลับฟังก์ชัน
ฟังก์ชันสามารถสร้างและส่งกลับคลอเชอร์ได้ — นี่คือรูปแบบโรงงาน:
<?php
function makeMultiplier(int $factor): Closure {
return function(int $n) use ($factor): int {
return $n * $factor;
};
}
$triple = makeMultiplier(3);
$tenX = makeMultiplier(10);
echo $triple(5); // 15
echo $tenX(5); // 50คลอเชอร์และ use
คลอเชอร์สามารถจับตัวแปรจากขอบเขตภายนอกด้วย use ได้ การจับจะใช้ค่า (สำเนา) เว้นแต่คุณจะเพิ่ม &:
<?php
$taxRate = 0.18;
$addTax = function(float $price) use ($taxRate): float {
return $price * (1 + $taxRate);
};
$taxRate = 0.20; // change outer variable
echo $addTax(100); // 118 — captured value at creation timeการจับตัวแปรด้วยการอ้างอิงด้วย use(&)
หากต้องการให้คลอเชอร์เห็นค่าภายนอกที่อัปเดตแล้ว ให้จับตัวแปรด้วยการอ้างอิง:
<?php
$count = 0;
$increment = function() use (&$count): void {
$count++;
};
$increment();
$increment();
echo $count; // 2ฟังก์ชันลูกศร (PHP 7.4)
ฟังก์ชันลูกศรคือคลอเชอร์แบบนิพจน์เดียวที่กระชับ และจะจับขอบเขตภายนอกด้วยค่าโดยอัตโนมัติ:
<?php
$rate = 1.18;
$prices = [10, 20, 30];
// Arrow function — no 'use' needed
$withTax = array_map(fn($p) => $p * $rate, $prices);
print_r($withTax); // [11.8, 23.6, 35.4]ฟังก์ชันลูกศรแก้ไขขอบเขตภายนอกไม่ได้
ฟังก์ชันลูกศรจับตัวแปรด้วยค่าเท่านั้น — จึงไม่สามารถแก้ไขตัวแปรภายนอกได้:
<?php
$total = 0;
$nums = [1, 2, 3];
// This does NOT modify $total!
array_walk($nums, fn($n) => $total += $n);
echo $total; // 0
// Use a reference closure for mutation:
array_walk($nums, function($n) use (&$total) { $total += $n; });
echo $total; // 6คลอเชอร์ในฐานะฟังก์ชันเรียกกลับ
ฟังก์ชัน PHP จำนวนมากรับสิ่งที่เรียกได้ — คุณสามารถส่งคลอเชอร์ อาร์เรย์ [$obj, 'method'] หรือชื่อฟังก์ชันในรูปสตริงได้:
<?php
$words = ['banana', 'apple', 'cherry'];
usort($words, fn($a, $b) => strcmp($a, $b));
print_r($words); // ['apple', 'banana', 'cherry']คลอเชอร์ที่เรียกใช้ทันที
คุณสามารถกำหนดและเรียกคลอเชอร์ในบรรทัดเดียวกันได้ — มีประโยชน์สำหรับสร้างขอบเขตที่แยกออกมา:
<?php
$result = (function(): int {
$x = 10;
$y = 20;
return $x + $y;
})();
echo $result; // 30
// $x and $y are not in outer scopeClosure::bind และ bindTo
คุณสามารถผูกคลอเชอร์ใหม่กับบริบทของอ็อบเจกต์อื่นได้โดยใช้ Closure::bind():
<?php
class Counter {
private int $value = 0;
}
$increment = Closure::bind(function(int $by): void {
$this->value += $by;
}, new Counter(), Counter::class);
// Now $increment has access to private $valueตรวจสอบความเข้าใจ
ข้อใดต่อไปนี้คือความแตกต่างหลักระหว่างคลอเชอร์ทั่วไปที่ใช้ use กับฟังก์ชันลูกศรใน PHP
ทบทวน: ฟังก์ชันไม่ระบุชื่อและคลอเชอร์
สรุป:
- ฟังก์ชันไม่ระบุชื่อเก็บไว้ในตัวแปรและส่งต่อได้
- คลอเชอร์จับตัวแปรภายนอกด้วย
use($var)(ด้วยค่า) หรือuse(&$var)(ด้วยการอ้างอิง) - ฟังก์ชันลูกศร (PHP 7.4) จะจับขอบเขตภายนอกด้วยค่าโดยอัตโนมัติ
- มีประโยชน์สำหรับฟังก์ชันเรียกกลับ: array_map, usort, array_filter…
- สามารถส่งกลับจากฟังก์ชันโรงงานได้
คำถามที่พบบ่อย
บทเรียน “ฟังก์ชันไม่ระบุชื่อและโคลสเชอร์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ฟังก์ชันไม่ระบุชื่อและโคลสเชอร์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ฟังก์ชันไม่ระบุชื่อและโคลสเชอร์”
เขียนฟังก์ชันในบรรทัดและจับตัวแปรด้วย use คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “ฟังก์ชันไม่ระบุชื่อและโคลสเชอร์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม
ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การกำหนดและเรียกใช้ฟังก์ชัน
- พารามิเตอร์ค่าเริ่มต้นและพารามิเตอร์จำนวนไม่แน่นอน
- ขอบเขตตัวแปร: ภายในและส่วนกลาง
- ฟังก์ชันไม่ระบุชื่อและโคลสเชอร์