Giới thiệu
Kế thừa là một nguyên tắc quan trọng của phương pháp luận lập trình hướng đối tượng. Sử dụng nguyên tắc này, quan hệ giữa hai lớp có thể được xác định. PHP hỗ trợ kế thừa trong mô hình đối tượng của nó.
PHP sử dụng mở rộng từ khóa để thiết lập mối quan hệ giữa hai lớp.
Cú pháp
class B extends A
trong đó A là lớp cơ sở (còn được gọi là cha) và B được gọi là lớp con hoặc lớp con. Lớp con kế thừa các phương thức public và protected của lớp cha. Lớp con có thể xác định lại hoặc ghi đè bất kỳ phương thức kế thừa nào. Nếu không, các phương thức kế thừa sẽ giữ lại chức năng của chúng như được định nghĩa trong lớp cha, khi được sử dụng với đối tượng của lớp con.
Định nghĩa lớp cha phải đứng trước định nghĩa lớp con. Trong trường hợp này, định nghĩa của lớp A sẽ xuất hiện trước định nghĩa của lớp B trong tập lệnh.
Ví dụ
<?php class A{ //properties, constants and methods of class A } class B extends A{ //public and protected methods inherited } ?>
Nếu tính năng tự động tải được bật, định nghĩa về lớp cha có được bằng cách tải tập lệnh lớp.
Ví dụ về Kế thừa
Đoạn mã sau cho thấy rằng lớp con kế thừa các thành viên công khai và được bảo vệ của lớp cha
Ví dụ
<?php class parentclass{ public function publicmethod(){ echo "This is public method of parent class\n" ; } protected function protectedmethod(){ echo "This is protected method of parent class\n" ; } private function privatemethod(){ echo "This is private method of parent class\n" ; } } class childclass extends parentclass{ public function childmethod(){ $this->protectedmethod(); //$this->privatemethod(); //this will produce error } } $obj=new childclass(); $obj->publicmethod(); $obj->childmethod(); ?>
Đầu ra
Điều này sẽ tạo ra kết quả sau. -
This is public method of parent class This is protected method of parent class PHP Fatal error: Uncaught Error: Call to private method parentclass::privatemethod() from context 'childclass'
Ví dụ ghi đè phương thức
Nếu một phương thức được kế thừa từ lớp cha được định nghĩa lại trong lớp con, định nghĩa mới sẽ ghi đè chức năng trước đó. Trong ví dụ sau, publicmethod được định nghĩa lại trong lớp con
Ví dụ
<?php class parentclass{ public function publicmethod(){ echo "This is public method of parent class\n" ; } protected function protectedmethod(){ echo "This is protected method of parent class\n" ; } private function privatemethod(){ echo "This is private method of parent class\n" ; } } class childclass extends parentclass{ public function publicmethod(){ echo "public method of parent class is overridden in child class\n" ; } } $obj=new childclass(); $obj->publicmethod(); ?>
Đầu ra
Điều này sẽ tạo ra kết quả sau. -
public method of parent class is overridden in child class
Thừa kế theo dòng dõi
PHP không hỗ trợ đa kế thừa. Do đó một lớp không thể mở rộng hai hoặc nhiều lớp. Tuy nhiên, nó hỗ trợ kế thừa theo thứ bậc như sau:
Ví dụ
<?php class A{ function test(){ echo "method in A class"; } } class B extends A{ // } class C extends B{ // } $obj=new C(); $obj->test(); ?>
Đầu ra
Điều này sẽ hiển thị kết quả sau
method in A class