Học về ví dụ kế thừa trong php

Học về ví dụ kế thừa trong php là vấn đề được nhiều lập trình viên quan tâm, bởi những kiến thức trên trường lớp là không đủ, vì vậy bài Học về ví dụ kế thừa trong php sẽ chia sẻ tới bạn nhiều thông tin hữu ích

Mọi người vẫn hỏi tôi về việc học lập trình nói chung và PHP nói riêng có cần năng khiếu hay quá khó để tiếp cận hay không. Thì tôi có thể trả lời rằng, học lập trình cũng như việc bạn học tiếng Anh hay bất kỳ một ngôn ngữ khác, bởi lập trình...là ngôn ngữ của máy tính, để máy tính đọc và máy tính thực hiện theo yêu cầu của mình, bạn thích là học được.

Tính kế thừa là một trong ba tính chất quan trọng của lập trình hướng đối tượng, nó đòi hỏi sự logic về phân tích các đối tượng trong phần mềm để từ đó đưa ra những mô hình design pattern giúp việc nâng cấp, bảo trì phần mềm dễ dàng hơn. Đây là tính chất được coi là quan trọng nhất bởi hầu hết các Framework trong PHP đều có sử dụng tính kế thừa, vì vậy nếu bạn đã xác định theo con đường lập trình PHP thì ắt phải hiểu về kế thừa.

Nội dung bài học như sau:

  • Tính kế thừa là gì?
  • Gọi phương thức và thuộc tính của lớp cha trong kế thừa

1. Tính kế thừa là gì?

Giả sử tôi có 2 lớp Động Vật và lớp Con Trâu có những thuộc tính và phương thức sau:

Học về ví dụ kế thừa trong php

Nhìn vào hình ta thấy 2 đối tượng Động Vật và Con Trâu có những đặc điểm chung và riêng. đối tượng Con trâu chỉ có một đặc tính khác đó là nó có sừng, còn đối tượng động vật thì không có. Vậy ta có nhận xét như sau: Con trâu cũng là một động vật nên nó có những đặc tính của động vật, hay nói cách khác nó có những đặc điểm và hành động của động vật, vì vậy con trâu có thể kế thừa nhưng đặc điểm và phương thức của động vật.

Đấy là ta đang nói đến tính kế thừa của các đối tượng trong thế giới thực, còn trong lập trình thì như thế nào ? 

Nếu khai báo thông thường thì ta sẽ tạo hai class như sau:

Lớp Động Vật:

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

Lớp Con Trâu:

class ConTrau
{
    // Thuộc Tính
    var $mat = '';
    var $mui = '';
    var $mieng = '';
    var $chan = '';
    var $gioitinh = '';
  
    // Thuộc tính này khác với động vật
    var $sung = ''; // con trâu có sừng
  
    // Hàm, phương thức
    function an(){
        // lệnh
    }
  
    function ngu(){
        // lệnh
    }
  
    function chay(){
        // lệnh
    }
  
    function lahet(){
        // lệnh
    }
} 

Rõ ràng 2 đối tượng Động Vật và Con Trâu có những thuộc tính và phương thức giống nhau tại sao ta lại phải khai báo 2 đối tượng dài như vậy? Vì thế trong lập trình hướng đối tượng cung cấp chúng ta một tính chất để giải quyết vấn đề này đó là tính kế thừa.

Cú pháp như sau:

class classCon extends classCha {  } 

Sau khi khai báo như vậy thì classCon sẽ có tất cả những thuộc tính, phương thức của classCha nên nó không cần phải viết lại.

Bài toán trên sẽ viết lại dưới dạng kế thừa như sau:

// Lớp Cha
class DongVat
{
    // Thuộc Tính
    var $mat = '';
    var $mui = '';
    var $mieng = '';
    var $chan = '';
    var $gioitinh = '';
  
    // Hàm, phương thức
    function an(){
        // lệnh
    }
  
    function ngu(){
        // lệnh
    }
  
    function chay(){
        // lệnh
    }
  
    function lahet(){
        // lệnh
    }
}
  
// Lớp Con
class ConTrau extends DongVat {
  
    // 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ày là cha ko có nên ta phải khai báo
    var $sung = '';
  
    // Tất cả các hàm, phương thức đều kế thừa từ cha
    // nên không cần viết lại
} 

2. Gọi các phương thức và thuộc tính của lớp cha

Sau khi kế thừa thì lớp có sẽ có những thuộc tính và phương thức ở lớp cha, vậy làm thế nào để lớp con có thể truy xuất đến những thuộc tính và phương thức đó? Ta sẽ tìm hiểu thông qua hai cách gọi đó là gọi từ bên trong lớp con và gọi từ bên ngoài lớp.

Gọi bên trong lớp con

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 phương thức và thuộc tính đều coi như là của nó (coi như chứ không phải là của nó hẳn) nên cách gọi cũng như cách nó gọi các phương thức thuộc tính của nó, đó là từ khóa $this->thuoctinh, $this->phuong_thuc().

Tuy nhiên để phân biệt hàm nào của cha, hàm nào của con người ta hay gọi bằng từ khóa: parent::thuoctinh, parent::phuong_thuc().

Ví dụ:



class DongVat
{
    // Thuộc tính
    var $mat = '';
    var $mui = '';
  
    // Phương Thức
    function an()
    {
        echo 'Dong Vat Dang An';
    }
}
  
// Lớp Con Trâu
class ConTrau extends DongVat
{
    function gioi_thieu()
    {
        $this->mat = 'Đây là cái mặt';
        $this->mui = 'Đây là cái mũi';
        parent::an(); // xuất ra chuỗi "Động Vật Đang Ăn"
    }
} 

Gọi từ bên ngoài lớp

Cách gọi cũng như cách 1 của phần gọi bên trong lớp con, tuy nhiên không được sử dụng cách 2 (parent::thuoctinh, parent::phuong_thuc()).

Ví dụ:

// Lớp Động Vật
class DongVat
{
    // Thuộc tính
    var $mat = '';
    var $mui = '';
  
    // Phương Thức
    function an()
    {
        echo 'Dong Vat Dang An';
    }
}
  
// Lớp Con Trâu
class ConTrau extends DongVat
{
    function gioi_thieu()
    {
        $this->mat = 'Đây là cái mặt';
        $this->mui = 'Đây là cái mũi';
        parent::an(); // xuất ra chuỗi "Động Vật Đang Ăn"
    }
}
  
// Chương Trình
$contrau = new ConTrau();
  
// Gọi đến hàm gioi_thieu trong lớp Con Trâu
// nên xuất ra màn hình chuỗi "Động Vật Đang Ăn"
$contrau->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 $contrau->mat;
echo $contrau->mui; 

3. Lời kết

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à thể hiện tính kế thừa trong php, qua các ví dụ các bạn biết cách gọi thuộc tính và phương thức của đối tượng cha từ bên trong lớp con và bên ngoài lớp con. Bài nay tôi hy vọng các bạn nắm vững phần lý thuyết cũng như thực hành để qua các bài sau sẽ hiểu được bài hơn. Bài tiếp theo chúng ta sẽ học các mức truy cập trong lập trình hướng đối tượng php.

Hy vọng với bài viết về Học về ví dụ kế thừa trong php đã giải đáp giúp bạn phần nào về kiến thức lập trình PHP. Như tôi đã nói, ngôn ngữ lập trình không quan trọng bằng tư duy giải thuật, tư duy logic để giải quyết vấn đề.

Với những năm trước đây, lập trình viên là một cái nghề khó và kén chọn người học, đồng nghĩa với việc thu nhập hàng tháng của các lập trình viên luôn cao. Còn những năm gần đây, thì lập trình là môn học phổ thông, và ai cũng nên học một ngôn ngữ lập trình nào đó.

Nếu bạn còn bất kỳ câu hỏi nào trong việc học lập trình online, hãy gửi yêu cầu cho tôi qua email hoidapcode.com@gmail.com hoặc để lại comment bên dưới, tôi sẽ giải đáp trong vòng 24 giờ!

Blog hoidapcode.com là blog được tổng hợp tự động các bài học, thông tin về lập trình trên mạng internet. Nếu bạn có ý kiến hoặc đóng góp về bài viết này, hãy liên hệ với tôi!