➔ PHP 5 kết hợp khái niệm lớp trừu tượng và phương thức trừu tượng.
➔ Lớp trừu tượng được định nghĩa không nhằm mục đích sử dụng để tạo một đối tượng từ nó; lớp trừu tượng có ít nhất một phương thức trừu tượng phải được khởi tạo để có nghĩa là một lớp trừu tượng.
➔ Các phương thức trừu tượng chỉ khai báo tên phương thức và danh sách tham số (chữ ký phương thức), nhưng không xác định tệp thực thi bên trong (không ai thích các phương thức giao diện).
Kế thừa lớp trừu tượng
➔ Khi một lớp kế thừa một lớp trừu tượng, nó phải định nghĩa (hiện thực) tất cả các phương thức trừu tượng trong lớp trừu tượng mà nó kế thừa.
➔ Ngoài ra, các phương thức phải có cùng mức hiển thị được xác định hoặc cao hơn mức hiển thị được chỉ định trong lớp cha (công khai, riêng tư, được bảo vệ)
Thí dụ
➔ Định nghĩa lớp trừu tượng AbstractClass
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <?php abstract class AbstractClass { // Force Extending class to define this method abstract protected function getValue(); abstract protected function prefixValue($prefix); // Common method public function printOut() { print $this->getValue() . "n"; } } ?> |
➔ Tạo một lớp con ConcreteClass1 kế thừa AbstractClass
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php class ConcreteClass1 extends AbstractClass { protected function getValue() { return "ConcreteClass1"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass1"; } } ?> |
➔ Tạo một lớp con ConcreteClass2 kế thừa AbstractClass
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php class ConcreteClass2 extends AbstractClass { protected function getValue() { return "ConcreteClass2"; } public function prefixValue($prefix) { return "{$prefix}ConcreteClass2"; } } ?> |
➔ Tạo đối tượng $ class1 $ class2
1 2 3 4 5 6 7 8 9 10 | <?php $class1 = new ConcreteClass1; $class1->printOut(); echo $class1->prefixValue("Foo_") . "n"; $class2 = new ConcreteClass2; $class2->printOut(); echo $class2->prefixValue("Foo_") . "n"; ?> |
➔ Hiển thị kết quả
1 2 3 4 5 | ConcreteClass1 Foo_ConcreteClass1 ConcreteClass2 Foo_ConcreteClass2 |