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
public 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
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ã:
Đã 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
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ã:
5
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