Giới thiệu
Trong lập trình hướng đối tượng, một lớp trừu tượng là lớp có thể được khởi tạo, tức là không thể khai báo đối tượng của lớp đó. PHP hỗ trợ khái niệm về lớp trừu tượng kể từ phiên bản 5.0
Một lớp được định nghĩa với từ khóa trừu tượng sẽ trở thành một 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 cũng được coi là trừu tượng.
Cú pháp
<?php class testclass{ // } ?>
Nếu chúng tôi cố gắng tạo một đối tượng từ lớp này, trình phân tích cú pháp PHP sẽ đưa ra lỗi như sau -
$a=new testclass(); PHP Fatal error: Uncaught Error: Cannot instantiate abstract class testclass
phương thức trừu tượng
Phương thức trừu tượng chỉ khai báo chữ ký của nó, tức là khả năng hiển thị, đối số và kiểu trả về của nó với các gợi ý về kiểu và không có bất kỳ chức năng nào. Một lớp kế thừa một lớp trừu tượng như vậy phải ghi đè (cung cấp định nghĩa) tất cả các phương thức trừu tượng. Phương thức tương ứng trong lớp con phải mang cùng một chữ ký như trong lớp cha. Nếu lớp con không đáp ứng điều kiện này, trình phân tích cú pháp PHP sẽ ném ra ngoại lệ. Một lớp mở rộng một lớp trừu tượng bây giờ có thể được khởi tạo, do đó nó được gọi là lớp cụ thể
Trong ví dụ sau, lớp cha có hai phương thức trừu tượng, chỉ một phương thức được định nghĩa lại trong lớp con. Điều này dẫn đến lỗi như sau -
Ví dụ
<?php abstract class testclass{ abstract function test1(); abstract function hello(); } class myclass extends testclass{ function test1(){ echo "Overrides parent test method"; } } $a=new myclass(); ?>
Đầu ra
Sau đây là thông báo 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ó đối số
Khi phương thức trừu tượng được xác định với các đối số, nó phải được ghi đè trong lớp con có cùng số lượng đối số
Trong ví dụ sau, phương thức trừu tượng trong lớp cha có hai đối số. Lớp con cũng định nghĩa hàm tương tự với hai đối số
Ví dụ
<?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); ?>
Đầu ra
Điều này sẽ tạo ra kết quả sau -
My name is Ravi and my age is 20