PHP NÂNG CAO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

Bài 20: Tìm hiểu magic method __call() và __callStatic()

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()__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é.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

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.

goi-toi-ham-undefined.png

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:

goi-den-phuong-thuc-call.png

Để 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ả:

goi-den-phuong-thuc-call-1.png

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('freetuts.net', 'thehalfheart@gmail.com');

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

call-static-php.png

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()__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. 

Tổng hợp dữ liệu trong bài:

Cùng chuyên mục:

Hàm key_exists() trong PHP

Hàm key_exists() trong PHP

Cách sử dụng key_exists() trong PHP

Hàm mysqli_fetch_row() trong PHP

Hàm mysqli_fetch_row() trong PHP

Cách sử dụng mysqli_fetch_row() trong PHP

Hàm end() trong PHP

Hàm end() trong PHP

Cách sử dụng end() trong PHP

Hàm mysqli_field_count() trong PHP

Hàm mysqli_field_count() trong PHP

Cách sử dụng mysqli_field_count() trong PHP

Hàm count() trong PHP

Hàm count() trong PHP

Cách sử dụng count() trong PHP

Hàm mysqli_field_seek() trong PHP

Hàm mysqli_field_seek() trong PHP

Cách sử dụng mysqli_field_seek() trong PHP

Hàm compact() trong PHP

Hàm compact() trong PHP

Cách sử dụng compact() trong PHP

Hàm mysqli_field_tell() trong PHP

Hàm mysqli_field_tell() trong PHP

Cách sử dụng mysqli_field_tell() trong PHP

Hàm array_values() trong PHP

Hàm array_values() trong PHP

Cách sử dụng array_values() trong PHP

Hàm mysqli_free_result() trong PHP

Hàm mysqli_free_result() trong PHP

Cách sử dụng mysqli_free_result() trong PHP

Hàm array_unshift() trong PHP

Hàm array_unshift() trong PHP

Cách sử dụng array_unshift() trong PHP

Hàm mysqli_get_charset() trong PHP

Hàm mysqli_get_charset() trong PHP

Cách sử dụng mysqli_get_charset() trong PHP

Hàm array_shift() trong PHP

Hàm array_shift() trong PHP

Cách sử dụng array_shift() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Hàm mysqli_get_client_stats() trong PHP

Cách sử dụng mysqli_get_client_stats() trong PHP

Hàm array_unique() trong PHP

Hàm array_unique() trong PHP

Cách sử dụng array_unique() trong PHP

Hàm mysqli_get_client_version() trong PHP

Hàm mysqli_get_client_version() trong PHP

Cách sử dụng mysqli_get_client_version() trong PHP

Hàm array_uintesect() trong PHP

Hàm array_uintesect() trong PHP

Cách sử dụng array_uintesect() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Hàm mysqli_get_connection_stats() trong PHP

Cách sử dụng mysqli_get_connection_stats() trong PHP

Hàm array_sum() trong PHP

Hàm array_sum() trong PHP

Cách sử dụng array_sum() trong PHP

Hàm mysqli_get_host_info() trong PHP

Hàm mysqli_get_host_info() trong PHP

Cách sử dụng mysqli_get_host_info() trong PHP

Top