Lớp trừu tượng abstract và phương thức trừu tượng trong PHP

Lớp trừu tượng là lớp chỉ dùng để kế thừa, không dùng trực tiếp tạo đối tượng được. Vậy lớp abstract luôn là lớp cha của các lớp khác. Trong lớp abstract có thể có thuộc tính, phương thức thông thường và có thể có phương thức gọi là phương thức abstract - loại phương thức chỉ được định nghĩa khi ở lớp kế thừa.

Một lớp kế thừa từ lớp abstract bắt buộc phải triển khai (định nghĩa) các phương thức khai báo là abstract trong lớp cha (lớp abstract).

Từ khóa abstract dùng để khai báo một lớp, phương thức abstract

Ví dụ, lớp Member sau định nghĩa là một lớp trừu tượng.

Ví dụ về abstract trong PHP

// Member khai báo là lớp abstract
abstract class Member {

    public      string  $user_name;
    protected   array   $roles;

    // Phương thức initRoles khai báo là phương thức abstract (trừu tượng)
    // dùng từ khóa abstract và không có phần thân {},
    // lớp con kế thừa phải định nghĩa cụ thể phương thức này
    protected abstract function initRoles();

    public function __construct(string $user_name)
    {
        $this->user_name = $user_name;
        $this->initRoles();
    }

    public function listRoles()
    {
        echo implode(',', $this->roles);
    }
}

Do lớp Member là một lớp trừu tượng, nên nó không thể dùng để khởi tạo đối tượng với toán tử new

$user_a = new Member('Mr A');
// Lỗi : Cannot instantiate abstract class Member

Lớp Member chỉ dùng làm lớp cha cho lớp khác kế thừa:

class Administrator extends Member
{

    // initRoles là phương thức abstract, nên lớp con Administrator bắt buộc phải triển khai
    // (nếu muốn có thể thay phạm vi truy cập)
   public function initRoles()
    {
        $this->roles = [
                'manage_user', 'edit_role', 'edit_post',
                'delete_user', 'view_post', 'delete_post'
        ];
    }
}

Sử dụng:

$user_a = new Administrator('Mr A');
$user_a->listRoles();

Một lớp abstract nếu muốn bạn không cần khai báo bất kỳ phương thức abstract nào cũng được.

Sử dụng lớp abstract để thống nhất các lớp triển khai phải theo một chuẩn nào đó (phải có các phương thức quy định bởi lớp abstract).


Đăng ký nhận bài viết mới