Hướng dẫn dùng define inherit trong PHP

Trong bài này, chúng ta sẽ tìm hiểu về tính kế thừa (inheritance) trong PHP. Để học tốt bài này, các bạn cần đọc lại bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách chạy ứng dụng web PHP với XAMPP.

Tính kế thừa (inheritance) đề cập đến việc định nghĩa một lớp mới (new class) dựa trên một lớp cũ đã có (existing class). Lớp mới được gọi là lớp dẫn xuất (derived class) hay lớp con (child class). Lớp cũ đã có gọi là lớp cơ sở (base class) hoặc lớp cha (parent class).

Lớp con sẽ kế thừa tất cả các thuộc tính và phương thức publicprotected từ lớp cha. Ngoài ra, lớp con có thể có các thuộc tính và phương thức riêng.

Trong PHP, một lớp con kế thừa lớp cha bằng cách sử dụng từ khóa extends. Ví dụ:

name = $name;
        $this->color = $color;
    }
    public function info() {
        echo "The cat is {$this->name} and the color is {$this->color}.";
    }
}
class Kitty extends Cat {
    public function message() {
        echo "Hello, my name is " . $this->name . ", has " . $this->color . " color";
    }
  }
$kitty = new Kitty("Kitty", "pink and white");
$kitty->message();
echo "
"; $kitty->info(); ?>

Lớp Kitty kế thừa từ lớp Cat. Lớp Kitty có thể sử dụng các thuộc tính public $name$color cũng như các phương thức public __construct()info() kế thừa từ lớp Cat. Lớp Kitty cũng có phương thức của riêng nó là message().

2. Chỉ định truy cập protected trong kế thừa

Những thuộc tính và phương thức có chỉ định truy cập là protected thì chỉ được truy cập bên trong lớp (class) chứa nólớp dẫn xuất (derived class) của lớp đó.

name = $name;
        $this->color = $color;
        $this->weight = $weight;
    }
    protected function info() {
        echo "The cat is {$this->name} and the color is {$this->color}.";
    }
}
class Kitty extends Cat {
    public function message() {
        // using protected method
        $this->info();
        echo "
Hello, my name is " . $this->name . ", has " . $this->color . " color"; // using protected $weight in derived class echo "
And my weight is " . $this->weight . " kilograms"; } } $kitty = new Kitty("Kitty", "pink and white", "3.5"); $kitty->message(); ?>

Trong ví dụ trên, thuộc tính $weight có chỉ định truy cập là protected và có thể sử dụng trong lớp dẫn xuất. Phương thức info() có chỉ định truy cập là protected và có thể sử dụng trong lớp dẫn xuất.

3. Ghi đè (overriding) phương thức kế thừa trong PHP

Các phương thức mà lớp con kế thừa có thể được ghi đè (overriding) bằng cách định nghĩa lại các phương thức này trong lớp con.

name = $name;
        $this->color = $color;
    }
    public function info() {
        echo "The cat is {$this->name} and the color is {$this->color}.";
    }

}
class Kitty extends Cat {
    public $weight;
    public function __construct($name, $color, $weight) {
        $this->name = $name;
        $this->color = $color;
        $this->weight = $weight;
    }
    public function info() {
        echo "Hello, my name is " . $this->name . ", has " . $this->color . " color";
        // using protected $weight in derived class
        echo "
And my weight is " . $this->weight . " kilograms"; } } $kitty = new Kitty("Kitty", "pink and white", "3.5"); $kitty->info(); ?>
Kết quả
Hello, my name is Kitty, has pink and white color
And my weight is 3.5 kilograms

Các phương thức __construct()info() trong lớp con Kitty sẽ ghi đè các phương thức __construct()info() trong lớp cha Cat.

4. Từ khóa final và kế thừa trong PHP

Từ khóa final có thể được sử dụng để ngăn kế thừa một lớp hoặc ngăn ghi đè (overriding) phương thức.


Trong ví dụ trên, lớp Cat được khai báo final nên không được kế thừa.


Trong ví dụ trên, hàm info() trong lớp Cat được khai báo final nên không được ghi đè trong lớp con Kitty.

  • Sử dụng từ khóa super trong Java
  • Lập trình điều khiển led bằng nút bấm với board mạch Arduino
  • Phân biệt các biến global, local và nonlocal trong Python
  • Các chỉ định truy cập (access modifier) trong PHP
  • C++ hỗ trợ đa kế thừa trong lập trình hướng đối tượng