Kế thừa class trong PHP

Trong bài này chúng ta đã tìm hiểu khái niệm tính kế thừa trong lập trình hướng đối tượng và các cách kế thừa trong php.

Như chúng ta đã biết thì Hướng Đối Tượng có 4 tính chất đặc trưng đó là: kế thừa, đóng gói, trừu tượng, đa hình. Và sau đây chúng ta sẽ cùng đi vào tìm hiểu tính kế thừa trong PHP OOP.

1. Tính kế thừa trong Hướng Đối Tượng và PHP

Kế thừa là gì?

- Để cho dễ hiểu thì chúng ta cùng tìm hiểu ví dụ sau đây:

Đầu tiên chúng ta sẽ tạo 2 class cùng các thuộc tính và phương thức như sau:

Class Con người

class ConNguoi
{
    // Thuộc Tính
    var $tai         = '';
    var $mat       = '';
    var $mui       = '';
    var $mieng   = '';
    var $chan     = '';
    var $tay        = '';
    var $gioitinh  = '';
  
    // Hàm, phương thức
    function di(){
        // lệnh
    }
  
    function dung(){
        // lệnh
    }
  
    function an(){
        // lệnh
    }

    function uong(){
        // lệnh
    }
      function ngu(){
        // lệnh
    }
    
    function nghi(){
        // lệnh
    }
}

Class Trẻ con

class TreCon
{
    // Thuộc Tính
    var $tai         = '';
    var $mat       = '';
    var $mui       = '';
    var $mieng   = '';
    var $chan     = '';
    var $tay        = '';
    var $gioitinh  = '';
  
    // Hàm, phương thức
    function bo(){
        // lệnh
    }
    function lay(){
        // lệnh
    }
    function di(){
        // lệnh
    }
  
    function dung(){
        // lệnh
    }
  
    function an(){
        // lệnh
    }

    function uong(){
        // lệnh
    }
      function ngu(){
        // lệnh
    }
    
    function nghi(){
        // lệnh
    }
}

- Theo như chúng ta đã thấy 2 Class ConNguoi và Class TreCon có những thuộc tính và phương thức giống nhau nhưng tại sao lại phải viết đi viết lại 2 lần như vậy. Để giải quyết vấn đề đó lập trình Hướng Đối Tượng sinh ra 1 tính chất gọi là tính Kế thừa. 

- Trong PHP để khai báo kế thừa từ lớp cha sang lớp con ta sử dụng từ khoá extends theo cú pháp:

class con extends class cha
{
    //code;
}

 Vậy ví dụ trên sẽ được viết lại như sau:

// Lớp Cha
class ConNguoi
{
    // Thuộc Tính
    var $tai        = '';
    var $mat      = '';
    var $mui      = '';
    var $mieng  = '';
    var $chan    = '';
    var $tay       = '';
    var $gioitinh = '';
  
    // Hàm, phương thức
    function di(){
        // lệnh
    }
  
    function dung(){
        // lệnh
    }
  
    function an(){
        // lệnh
    }
  
    function uong(){
        // lệnh
    }
    function ngu(){
        // lệnh
    }
    function nghi(){
        // lệnh
    }
}
  
// Lớp Con
class TreCon extends ConNguoi {
  
    // Tất cả các thuộc tính khác đều kế thừa từ cha
    // nên không cần viết lại
    // chỉ riêng thuộc tính nào class cha không có mà class con có chúng ta sẽ khai báo

    function bo(){
        // lệnh
    }
    function lay(){
        // lệnh
    }  
}

2. Cách gọi cách thuộc tính và phương thức của class cha

- Sau khi kế thừa thì lớp con sẽ có tất cả những thuộc tính và phương thức của lớp cha, vậy làm như thế nào để truy xuất đến những thuộc tính và phương thức đó?

Có 2 cách gọi đó là gọi từ bên trong gọi từ bên ngoài

+ Gọi từ bên trong: như khái niệm tính kế thừa, lớp con kế thừa từ lớp cha nên tất cả các thuộc tính và phương thức của lớp cha coi như là của lớp con nên cách gọi cũng tương tự như cách gọi chính thuộc tính và phương thức của nó, đó chính là dùng từ khoá $this->thuoctinh$this->phuong_thuc().

Tuy nhiên để phân biệt hàm nào của lớp cha, hàm nào của lớp con người ta hay dùng từ khoá:parent::thuoctinhparent::phuong_thuc() , parent::  biểu thị cho các thuộc tính và phương thức được gọi từ class cha. 

ví dụ:

// Lớp Con Người
class ConNguoi
{
    // Thuộc Tính
    var $tai         = '';
    var $mat       = '';
    var $mui       = '';
    var $mieng   = '';
    var $chan     = '';
    var $tay        = '';
    var $gioitinh  = '';
  
    // Hàm, phương thức
    function di(){
        // lệnh
    }
  
    function dung(){
        // lệnh
    }
  
    function an(){
        // lệnh
    }

    function uong(){
        // lệnh
    }
      function ngu(){
        echo 'Con người ngủ đêm';
    }
    
    function nghi(){
        // lệnh
    }
}
  
// Lớp TreCon
class TreCon extends ConNguoi
{
    function gioi_thieu()
    {
        $this->mat = 'Đây là cái mặt';
        $this->mui = 'Đây là cái mũi';
        parent::ngu(); // xuất ra chuỗi "Con người ngủ đêm"
    }
}

 

+ Gọi từ bên ngoài: tương tự như cách gọi từ bên trong nhưng k sử dụng từ khoá:parent::thuoctinhparent::phuong_thuc()   

ví dụ:

//Lớp Con Người
class ConNguoi
{
    // Thuộc Tính
    var $tai         = '';
    var $mat       = '';
    var $mui       = '';
    var $mieng   = '';
    var $chan     = '';
    var $tay        = '';
    var $gioitinh  = '';
  
    // Hàm, phương thức

    function uong(){
        // lệnh
    }
      function ngu(){
        echo 'Con người ngủ đêm';
    }
    
    function nghi(){
        // lệnh
    }
}
  
// Lớp TreCon
class TreCon extends ConNguoi
{
    function gioi_thieu()
    {
        $this->mat = 'Đây là cái mặt';
        $this->mui = 'Đây là cái mũi';
        parent::ngu(); // xuất ra chuỗi "Con người ngủ đêm"
    }
}

// Chương Trình
$tre_con = new TreCon();
  
// Gọi đến hàm gioi_thieu trong lớp Trẻ Con
// nên xuất ra màn hình chuỗi "Con người ngủ đêm"
$tre_con->gioi_thieu();
  
// Trong hàm giới thiệu có gán giá trị cho 2
// thuộc tính mắt và mũi, giờ ta xuất ra màn hình
// xem giá trị nó là gì
  
echo $tre_con->mat;
echo $tre_con->mui;

 

Bài liên quan

Kế thừa (Inheritance) trong Python

Kế thừa trong lập trình hướng đối tượng cho phép chúng ta khai báo lớp mới sử dụng lại các hàm và thuộc tính của lớp cha cùng các chức năng mở rộng thêm. Trong bài viết này, Quantrimang sẽ cùng bạn học cách sử dụng tính kế thừa trong Python. Kế thừa là gì? Kế thừa (Inheritance) cho phép ...

Tạ Quốc Bảo viết 21:58 ngày 03/12/2018

Kế thừa class trong PHP

Trong bài này chúng ta đã tìm hiểu khái niệm tính kế thừa trong lập trình hướng đối tượng và các cách kế thừa trong php.

Nguyễn Huân viết 07:49 ngày 06/10/2018

[BÀI 31] KẾ THỪA TRONG PHP

Kế thừa là gì: Kế thừa trong php được hiểu là class này có thể sử dụng lại các thuộc tính, phương thức của class khác mà không cần viết lại từ đầu. Mỗi thuộc tính, phương thức chỉ cần viết một lần duy nhất và có thể chia sẻ thông tin với class khác nhờ sự kế thừa. Class cho các class khác kế ...

Hoàng Hải Đăng viết 17:01 ngày 04/10/2018

Bài 06: Tính kế thừa trong OPP PHP

1. Kế thừa là gì ? Là một đối Object con sẽ nhận mọi thuộc tính và phương thức của Object cha làm thuộc tính và phương thức của nó nếu các thuộc tính & phương thức của Object cha có mức truy cập là public và protected. Cú pháp: class classChild extends classParent { // Sone } ...

Tạ Quốc Bảo viết 16:28 ngày 01/10/2018

Phân Biệt Sự Khác Nhau Giữa Interface Và Abstract Class Trong PHP

Interface Là Gì Interface định nghĩa tập hợp các method mà những class sử dụng interface sẽ cần phải triển khai (implement) các method này. interface I_Test { public function foo(); } Với interface I_Test được định nghĩa như trên thì bắt buộc tất cả các class sử dụng interface này phải có ...

Bùi Văn Nam viết 10:35 ngày 07/09/2018
0