Giới thiệu
Trong lập trình hướng đối tượng, lớp trừu tượng (abstract class) là lớp không thể khởi tạo (instantiate), tức là không thể khai báo đối tượng của lớp đó. PHP hỗ trợ khái niệm abstract class từ phiên bản 5.0.
Lớp được định nghĩa với từ khóa abstract trở thành lớp trừu tượng. Hơn nữa, bất kỳ lớp nào chứa ít nhất một phương thức trừu tượng (abstract method) cũng được coi là trừu tượng.
Cú pháp
<?php
abstract class testclass {
//
}
?>
Nếu cố tạo đối tượng của lớp này, PHP ném lỗi:
$a = new testclass(); // PHP Fatal error: Uncaught Error: Cannot instantiate abstract class testclass
Phương thức trừu tượng (Abstract method)
Phương thức trừu tượng chỉ khai báo chữ ký (signature): visibility, tham số, kiểu trả về với type hint, không có thân hàm. Lớp kế thừa lớp trừu tượng như vậy phải ghi đè (override) tất cả phương thức trừu tượng. Phương thức tương ứng trong lớp con phải có cùng chữ ký với lớp cha. Nếu lớp con không đáp ứng điều kiện này, PHP ném exception. Lớp kế thừa lớp trừu tượng và triển khai đầy đủ các phương thức trừu tượng có thể khởi tạo được, gọi là lớp cụ thể (concrete class).
Ví dụ: Thiếu triển khai phương thức trừu tượng
<?php
abstract class testclass {
abstract function test1();
abstract function hello();
}
class myclass extends testclass {
function test1() {
echo "Overrides parent test method";
}
}
$a = new myclass();
?>
Lỗi
PHP Fatal error: Class myclass contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (testclass::hello)
Phương thức trừu tượng có tham số
Khi phương thức trừu tượng định nghĩa có tham số, nó phải được ghi đè trong lớp con với cùng số lượng tham số.
<?php
abstract class testclass {
abstract function hello($name, $age);
}
class myclass extends testclass {
function hello($name, $age) {
echo "My name is $name and my age is $age";
}
}
$a = new myclass();
$a->hello("Ravi", 20);
?>
Kết quả
My name is Ravi and my age is 20