เมธอด __invoke

เมธอดมหัศจรรย์ __invoke อนุญาตให้อินสแตนซ์ของคลาสถูกเรียกใช้ได้เหมือนฟังก์ชัน เมื่อออบเจ็กต์ถูกเรียกใช้เหมือนฟังก์ชัน PHP จะเรียกเมธอดนี้โดยอัตโนมัติ เมธอดสามารถรับพารามิเตอร์และส่งคืนค่าได้เหมือนฟังก์ชันทั่วไป

ไวยากรณ์

phpclass MyClass {
  public function __invoke(...$args) {
    // การนำไปใช้งาน
  }
}

ตัวอย่าง

มาสร้างคลาสด้วยเมธอด __invoke และเรียกออบเจ็กต์เป็นฟังก์ชัน:

php<?php
  class Greeter {
    public function __invoke($name) {
      return "Hello, $name!";
    }
  }
  
  $greet = new Greeter();
  echo $greet('John');
?>

ผลลัพธ์จากการรันโค้ด:

php'Hello, John!'

ตัวอย่าง

การใช้ __invoke กับพารามิเตอร์หลายตัว:

php<?php
  class Calculator {
    public function __invoke($a, $b) {
      return $a + $b;
    }
  }
  
  $calc = new Calculator();
  echo $calc(5, 3);
?>

ผลลัพธ์จากการรันโค้ด:

php8

ตัวอย่าง

ตรวจสอบว่าออบเจ็กต์สามารถเรียกได้หรือไม่โดยใช้ is_callable:

php<?php
  class Test {}
  
  $obj1 = new Test();
  $obj2 = new class { public function __invoke() {} };
  
  var_dump(is_callable($obj1));
  var_dump(is_callable($obj2));
?>

ผลลัพธ์จากการรันโค้ด:

phpfalse
true

ดูเพิ่มเติม

  • เมธอด __construct,
    ซึ่งเป็นคอนสตรักเตอร์ของคลาส
  • เมธอด __toString,
    ซึ่งอนุญาตให้ออบเจ็กต์ถูกแสดงเป็นสตริง