PHP Inheritance

Kế thừa trong PHP

Kế thừa là một trong những tính năng quan trọng của lập trình hướng đối tượng (OOP) trong PHP. Nó cho phép một lớp (class) kế thừa các thuộc tính và phương thức từ một lớp khác. Điều này giúp tái sử dụng mã và tổ chức mã nguồn một cách hiệu quả.

Cú pháp của kế thừa trong PHP

Cú pháp cơ bản để tạo một lớp con (subclass) kế thừa từ một lớp cha (parent class) trong PHP như sau:

class ParentClass {
    // Thuộc tính và phương thức của lớp cha
}

class ChildClass extends ParentClass {
    // Thuộc tính và phương thức của lớp con
}

Ví dụ về kế thừa

class Animal {
    public function makeSound() {
        return "Some sound";
    }
}

class Dog extends Animal {
    public function makeSound() {
        return "Bark";
    }
}

$dog = new Dog();
echo $dog->makeSound(); // Kết quả: Bark

Trong ví dụ trên, lớp Dog kế thừa từ lớp Animal. Lớp Dog có thể sử dụng phương thức makeSound của lớp Animal, nhưng nó cũng có thể ghi đè (override) phương thức đó.

Các loại kế thừa

Trong PHP, có các loại kế thừa chính:

  • Kế thừa đơn: Một lớp con chỉ kế thừa từ một lớp cha duy nhất.
  • Kế thừa đa cấp: Một lớp con có thể kế thừa từ một lớp cha, và lớp đó lại có thể kế thừa từ một lớp cha khác.
  • Kế thừa đa hợp: PHP không hỗ trợ kế thừa đa cấp trực tiếp, nhưng có thể sử dụng interface để đạt được một số tính năng tương tự.

Ghi đè phương thức (Method Overriding)

Lớp con có thể ghi đè các phương thức từ lớp cha để cung cấp các hành vi cụ thể hơn cho đối tượng của lớp con đó. Tuy nhiên, phương thức trong lớp cha phải được xác định là public hoặc protected.

class Shape {
    public function area() {
        return 0;
    }
}

class Circle extends Shape {
    private $radius;

    public function __construct($radius) {
        $this->radius = $radius;
    }

    public function area() {
        return 3.14 * $this->radius * $this->radius;
    }
}

$circle = new Circle(5);
echo $circle->area(); // Kết quả: 78.5

Phương thức gọi từ lớp cha

Bên trong lớp con, bạn có thể gọi phương thức của lớp cha bằng cách sử dụng từ khóa parent:

class ParentClass {
    public function greet() {
        return "Hello from Parent!";
    }
}

class ChildClass extends ParentClass {
    public function greet() {
        return parent::greet() . " Hello from Child!";
    }
}

$child = new ChildClass();
echo $child->greet(); // Kết quả: Hello from Parent! Hello from Child!

Kế thừa và tính chất trừu tượng (Abstract Classes)

PHP cũng hỗ trợ khái niệm lớp trừu tượng để tạo ra các lớp không thể được khởi tạo và yêu cầu các lớp con phải định nghĩa một số phương thức nhất định.

abstract class Shape {
    abstract public function area();
}

class Rectangle extends Shape {
    private $width;
    private $height;

    public function __construct($width, $height) {
        $this->width = $width;
        $this->height = $height;
    }

    public function area() {
        return $this->width * $this->height;
    }
}

Trong ví dụ trên, lớp Shape là một lớp trừu tượng với phương thức area mà lớp Rectangle bắt buộc phải định nghĩa.

Kết luận

Kế thừa trong PHP cung cấp nhiều lợi ích như tái sử dụng mã, modularization và giúp dễ dàng quản lý mã phức tạp. Hiểu rõ về kế thừa và các nguyên lý của OOP là rất quan trọng để phát triển ứng dụng PHP hiệu quả.