Phương thức __invoke

Phương thức ma thuật __invoke cho phép một thể hiện của lớp được gọi như một hàm. Khi một đối tượng được gọi như một hàm, PHP sẽ tự động gọi phương thức này. Phương thức có thể nhận các tham số và trả về giá trị, giống như một hàm thông thường.

Cú pháp

phpclass MyClass {
  public function __invoke(...$args) {
    // triển khai
  }
}

Ví dụ

Tạo một lớp với phương thức __invoke và gọi đối tượng như một hàm:

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

Kết quả thực thi mã:

php'Hello, John!'

Ví dụ

Sử dụng __invoke với nhiều tham số:

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

Kết quả thực thi mã:

php8

Ví dụ

Kiểm tra xem một đối tượng có thể gọi được không bằng 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));
?>

Kết quả thực thi mã:

phpfalse
true

Xem thêm

  • phương thức __construct,
    là hàm tạo của lớp
  • phương thức __toString,
    cho phép đối tượng được biểu diễn dưới dạng chuỗi