Phương thức __call

Phương thức __call là một phương thức ma thuật trong PHP, được tự động gọi khi có nỗ lực truy cập vào một phương thức không tồn tại hoặc không thể truy cập được của lớp. Tham số đầu tiên của nó nhận tên của phương thức được gọi, tham số thứ hai - một mảng các đối số.

Cú pháp

phppublic function __call(string $name, array $arguments) {
  // triển khai
}

Ví dụ

Hãy tạo một lớp với phương thức __call, phương thức này sẽ chặn tất cả các lời gọi đến các phương thức không tồn tại:

php<?php
  class Test {
    public function __call($name, $args) {
      echo "Đã gọi phương thức: " . $name . "\n";
      echo "Các đối số: ";
      print_r($args);
    }
  }
  
  $test = new Test();
  $test->nonExistentMethod('a', 'b', 123);
?>

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

phpĐã gọi phương thức: nonExistentMethod
Các đối số: ['a', 'b', 123]

Ví dụ

Triển khai một trình ủy quyền phương thức đơn giản bằng cách sử dụng __call:

php<?php
  class Calculator {
    public function add($a, $b) {
      return $a + $b;
    }
  }
  
  class Math {
    private $calculator;
    
    public function __construct() {
      $this->calculator = new Calculator();
    }
    
    public function __call($name, $args) {
      if (method_exists($this->calculator, $name)) {
        return call_user_func_array(
          [$this->calculator, $name],
          $args
        );
      }
      throw new Exception("Không tìm thấy phương thức $name");
    }
  }
  
  $math = new Math();
  echo $math->add(2, 3);
?>

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

php5

Xem thêm

  • phương thức __callStatic,
    phương thức chặn các lời gọi phương thức tĩnh
  • phương thức __get,
    phương thức chặn truy cập vào các thuộc tính không tồn tại