Kế thừa trong PHP OOP

Thừa kế là gì?

Khi một lớp dẫn xuất từ ​​một lớp khác, nó được gọi là kế thừa. Dưới đây là một số thuật ngữ quan trọng liên quan đến kế thừa trong PHP.

  • Lớp dành cho phụ huynh – Lớp mà các lớp khác được dẫn xuất từ ​​đó được gọi là lớp cha. Nó còn được gọi là lớp cơ sở.
  • Lớp trẻ em – Lớp được dẫn xuất từ ​​lớp khác được gọi là lớp con. Có một số tên khác cho nó cũng như lớp lá hoặc lớp dẫn xuất.

Kế thừa trong PHP

Làm thế nào để kế thừa một lớp trong PHP?

Một lớp có thể được kế thừa bằng cách sử dụng kéo dài từ khóa. Hãy xem ví dụ sau.

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  public function intro() {
    echo "The fruit is {$this->name} and the color is {$this->color}.";
  }
}

// Apple is inherited from Fruit
class Apple extends Fruit {
  public function message() {
    echo "I am from Fruit class or Apple one? ";
  }
}
$apple= new Apple("Apple", "red");
$apple->message();
$apple->intro();
?>

Trong ví dụ trên

  • Chúng tôi tạo một cơ sở hoặc lớp cha Fruit với một số thuộc tính và phương thức.
  • Chúng ta tạo một lớp apple khác mở rộng / kế thừa lớp cha Fruit bằng cách sử dụng từ khóa expand.
  • Tạo cá thể / đối tượng apple và truy cập phương thức lớp fruit bằng cách sử dụng kế thừa.

Tóm tắt phần giới thiệu về kế thừa trong PHP, chúng tôi tập hợp các điểm sau cho bạn.

  1. Tính kế thừa cho phép lớp con truy cập vào __construct, phương thức và thuộc tính công khai của lớp cha.
  2. Trong ví dụ trên, chúng ta có thể truy cập phương thức của lớp apple bằng cách sử dụng đối tượng của nó, cũng như các phương thức của lớp cha.

Phạm vi của các công cụ sửa đổi quyền truy cập được bảo vệ trong Kế thừa

Trong hướng dẫn trước, chúng ta đã biết rằng các thuộc tính / phương thức được bảo vệ của một lớp có thể truy cập được trong lớp và các lớp được dẫn xuất từ ​​đó.

Để hiểu phạm vi của các công cụ sửa đổi quyền truy cập được bảo vệ trong kế thừa, trước tiên chúng ta hãy xem xét ví dụ sau.

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "I am $this->name and my color is $this->color";
  }
}

class Apple extends Fruit {
  public function message() {
    echo "I am from Fruit class or Apple one?";
  }
}

$apple = new Apple("Apple", "red");
$apple->message();
$apple->intro();
?>

Trong ví dụ trên:

  • Chúng tôi tạo một lớp trái cây với một số thuộc tính công khai và một phương thức được bảo vệ.
  • Chúng tôi tạo một lớp apple khác, mở rộng từ lớp Fruit và tạo thể hiện của nó.
  • Khi chúng tôi cố gắng truy cập phương thức được bảo vệ của lớp Fruite bằng cách sử dụng đối tượng lớp apple, nó sẽ báo lỗi vì chúng tôi đang cố gắng truy cập thành viên được bảo vệ của lớp Fruit bên ngoài lớp dẫn xuất.

Hãy chuyển sang một ví dụ khác, thực tế là một chút sửa đổi của ví dụ trên.

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  protected function intro() {
    echo "I am {$this->name} and my color is {$this->color}.";
  }
}

class Apple extends Fruit {
  public function message() {
    echo "Am I a fruit or an apple? ";
    $this -> intro(); // protected
  }
}

$apple = new Apple("Apple", "red");
$strawberry->message();
?>

Trong ví dụ trên, phương thức bảo vệ của lớp Fruit có thể truy cập được trong lớp apple vì chúng ta đang truy cập nó trong lớp.

Ghi đè trong Thừa kế

Ghi đè đề cập đến việc xác định lại các phương thức của lớp cha trong các lớp con, sử dụng cùng một tên. Hãy xem ví dụ sau về ghi đè trong kế thừa bên dưới.

<?php
class Fruit {
  public $name;
  public $color;
  public function __construct($name, $color) {
    $this->name = $name;
    $this->color = $color;
  }
  public function intro() {
    echo "I am {$this->name} and my color is {$this->color}.";
  }
}

class Apple extends Fruit {
  public $weight;
  public function __construct($name, $color, $weight) {
    $this->name = $name;
    $this->color = $color;
    $this->weight = $weight;
  }
  public function intro() {
    echo "I am {$this->name}, my color is {$this->color}. Also, my weight is {$this->weight} kg.";
  }
}

$apple= new Apple("Apple", "red", 50);
$apple->intro();
?>

Trong ví dụ trên:

  • Chúng tôi tạo một lớp cha Fruit và một lớp con apple mở rộng lớp Fruit và xác định lại __contruct và các phương thức giới thiệu trong đó.
  • Lưu ý rằng lớp con apple định nghĩa phương thức __construct và phương thức giới thiệu có cùng tên. Tuy nhiên, các thông số có thể khác nhau.
  • Chúng tôi tạo intance lớp apple và truyền các tham số cho hàm cấu trúc.
  • Khi chúng ta gọi phương thức giới thiệu bằng cách sử dụng cá thể apple, nó sẽ gọi phương thức giới thiệu của lớp apple vì chúng ta đã tạo cá thể của đối tượng apple bằng cách sử dụng phương thức khởi tạo lớp apple.

Vai trò của Từ khóa cuối cùng trong kế thừa

Mô hình cuối cùng từ khóa ngăn lớp con / lớp dẫn xuất ghi đè phương thức của lớp cha / cơ sở. Nhìn vào ví dụ sau để hiểu việc sử dụng từ khóa Final.

<?php
class Fruit {
  final public function intro() {
    // code
  }
}

class Apple extends Fruit {
// error to override the intro
  public function intro() {
    // code
  }
}
?>

Trong ví dụ trên, lớp apple cố gắng ghi đè phương thức giới thiệu. Nó sẽ báo lỗi vì chúng ta đã sử dụng từ khóa cuối cùng với phương thức giới thiệu của lớp Fruit.

Bấm để tìm một quan chức tham chiếu đến sự kế thừa PHP.

Kết luận

Kế thừa không chỉ là một khái niệm quan trọng của OOP trong PHP mà trong bất kỳ ngôn ngữ nào, nó cũng đóng một vai trò quan trọng. Từ góc độ phỏng vấn, câu hỏi kế thừa là rất quan trọng. Vì vậy, bạn phải tự mình thực hành tính kế thừa.