Học về phương thức __call() và __callStatic() trong PHP

Học về phương thức __call() và __callStatic() trong PHP là vấn đề được nhiều lập trình viên quan tâm, bởi những kiến thức trên trường lớp là không đủ, vì vậy bài Học về phương thức __call() và __callStatic() trong PHP sẽ chia sẻ tới bạn nhiều thông tin hữu ích

Mọi người vẫn hỏi tôi về việc học lập trình nói chung và PHP nói riêng có cần năng khiếu hay quá khó để tiếp cận hay không. Thì tôi có thể trả lời rằng, học lập trình cũng như việc bạn học tiếng Anh hay bất kỳ một ngôn ngữ khác, bởi lập trình...là ngôn ngữ của máy tính, để máy tính đọc và máy tính thực hiện theo yêu cầu của mình, bạn thích là học được.

Thông thường khi bạn gọi đến một phương thức nào đó mà chưa được định nghĩa trong lớp của đối tượng thì chương trình sẽ bị báo lỗi không tồn tại method. Vậy có câu hỏi đặt ra làm sao để bắt được sự kiện khi gọi tới một phương thức không tồn tại và thông báo lỗi hoặc là xư lý một cái gì đó? Câu trả lời là bạn có thể sử dụng hai hàm thuộc danh sách Magic methods đó la __call() và __callStatic().

Trong hai methods đều có tác dụng giống nhau nhưng sẽ được sử dụng ở hai trường hợp khác nhau. Bây giờ ta sẽ tìm hiểu method __call() trước nhé.

1. Phương thức __call() trong PHP

Phương thức __call() sẽ được gọi khi bạn gọi tới một phương thức nào đó không tồn tại trong đối tượng.

Ví dụ: gọi tới phương thức không tồn tại get_by_id()

class Student
{
     
}
 
$student = new Student();
$student->get_by_id();

Chạy lên bạn sẽ nhận được một thông báo lỗi như hình dưới đây.

Bây giờ mình sẽ viết một phương thức __call() để bắt sự kiện gọi tới phương thức không tồn tại.

class Student
{
    public function __call($method, $params)
    {
        echo 'Tên phương thức: ' .$method . '<br/>';
        echo 'Tham số truyền vào: ' .$method . '<br/>';
        echo '<pre>';
        print_r($params);
    }
} 

Có hai tham số truyền vào như sau:

  • $method là tên của phương thức đang gọi
  • $params là danh sách các tham số truyền vào của phương thức đó

Quay laị ví dụ, bây giờ mình gọi tới phương thức không tồn tại như sau:

$student = new Student();
$student->get_by_id(); 

Kết quả như sau:

Để rõ hơn thì mình gọi thêm một phương thức không tồn tại nữa:

$student = new Student();  
$student->get_name('thehalfheart'); 

Kết quả:

2. Phương thức __callStatic trong PHP

Phương thức __callStatic() có tác dụng giống như phương thức __call() và chỉ khác nhau ở chỗ __callStatic() dùng trong trường hợp bạn gọi đến phương thức tĩnh không tồn tại.

Ví dụ: Tạo một lớp Website và gọi đến phương thức tĩnh không tồn tại

class Website
{
    public static function __callStatic($method, $params) {
        echo 'Tên phương thức: ' .$method . '<br/>';
        echo 'Tham số truyền vào: ' .$method . '<br/>';
        echo '<pre>';
        print_r($params);
    }
} 

Bây giờ giả sử ta gọi tới một phương thức tĩnh không tồn tại như sau:

Website::setWebsite('Hoidapcode.com', 'thehalfheart@gmail.com');

Và kết quả ta nhận được:

Như vậy nó cũng có hai tham số truyền vào là:

  • $method là tên của phương thức đang gọi
  • $params là danh sách các tham số truyền vào của phương thức đó

3. Lời kết

Qua bài này chắc hẳn bạn đã biết được hai phương thức nằm trong danh sách các hàm Magic methods đó là __call() và __callStatic(). Thực tế hai hàm này cũng rất ít khi sử dụng và nếu có sử dụng thì để thông báo lỗi trong quá trình code ứng dụng. 

Hy vọng với bài viết về Học về phương thức __call() và __callStatic() trong PHP đã giải đáp giúp bạn phần nào về kiến thức lập trình PHP. Như tôi đã nói, ngôn ngữ lập trình không quan trọng bằng tư duy giải thuật, tư duy logic để giải quyết vấn đề.

Với những năm trước đây, lập trình viên là một cái nghề khó và kén chọn người học, đồng nghĩa với việc thu nhập hàng tháng của các lập trình viên luôn cao. Còn những năm gần đây, thì lập trình là môn học phổ thông, và ai cũng nên học một ngôn ngữ lập trình nào đó.

Nếu bạn còn bất kỳ câu hỏi nào trong việc học lập trình online, hãy gửi yêu cầu cho tôi qua email hoidapcode.com@gmail.com hoặc để lại comment bên dưới, tôi sẽ giải đáp trong vòng 24 giờ!

Blog hoidapcode.com là blog được tổng hợp tự động các bài học, thông tin về lập trình trên mạng internet. Nếu bạn có ý kiến hoặc đóng góp về bài viết này, hãy liên hệ với tôi!