เมธอด __invoke
เมธอดมหัศจรรย์ __invoke อนุญาตให้อินสแตนซ์ของคลาสถูกเรียกใช้ได้เหมือนฟังก์ชัน
เมื่อออบเจ็กต์ถูกเรียกใช้เหมือนฟังก์ชัน PHP จะเรียกเมธอดนี้โดยอัตโนมัติ
เมธอดสามารถรับพารามิเตอร์และส่งคืนค่าได้เหมือนฟังก์ชันทั่วไป
ไวยากรณ์
class MyClass {
public function __invoke(...$args) {
// การนำไปใช้งาน
}
}
ตัวอย่าง
มาสร้างคลาสด้วยเมธอด __invoke และเรียกออบเจ็กต์เป็นฟังก์ชัน:
<?php
class Greeter {
public function __invoke($name) {
return "Hello, $name!";
}
}
$greet = new Greeter();
echo $greet('John');
?>
ผลลัพธ์จากการรันโค้ด:
'Hello, John!'
ตัวอย่าง
การใช้ __invoke กับพารามิเตอร์หลายตัว:
<?php
class Calculator {
public function __invoke($a, $b) {
return $a + $b;
}
}
$calc = new Calculator();
echo $calc(5, 3);
?>
ผลลัพธ์จากการรันโค้ด:
8
ตัวอย่าง
ตรวจสอบว่าออบเจ็กต์สามารถเรียกได้หรือไม่โดยใช้ is_callable:
<?php
class Test {}
$obj1 = new Test();
$obj2 = new class { public function __invoke() {} };
var_dump(is_callable($obj1));
var_dump(is_callable($obj2));
?>
ผลลัพธ์จากการรันโค้ด:
false
true
ดูเพิ่มเติม
-
เมธอด
__construct,
ซึ่งเป็นคอนสตรักเตอร์ของคลาส -
เมธอด
__toString,
ซึ่งอนุญาตให้ออบเจ็กต์ถูกแสดงเป็นสตริง