Lập trình hướng đối tượng trong php

Ở bài đọc trước tất cả chúng ta đã tìm tòi tính đóng gói trong php. Trong bài đọc này tất cả chúng ta sẽ tìm tòi về tính kế thừa trong php nhé.

Bài viết

Đọc tốt bài này bạn sẽ có tri thức căn bản sau:

  • Hiểu

    tính kế thừa trong php

    là gì.

  • Các kiểu kế thừa trong php.
  • Ứng dụng tính kế thừa trong thực tiễn một cách linh động.

Đặc tính tính kế thừa (inheritance)

Tính kế thừa là cách tất cả chúng ta mở rộng các tính năng & đặc điểm của một lớp (class) đã có trong class mới được tạo nên, bằng cách kế thừa class đã có. Nghĩa là tất cả chúng ta có thể thêm attributes and functionalities cho class mới & chũng cúng có những functionalities and attributes của class cha.

Khi tất cả chúng ta kế thừa 1 class. tất cả chúng ta gọi class được thừa hưởngclass con (sub class) & class mà tất cả chúng ta kế thừa là class cha (parrent class). class cha còn gọi là lớp nền tảng (base class).

Phương pháp này giúp tất cả chúng ta làm chủ đoạn code tốt hơn & có khả năng tái sử dụng. đó cũng là mục đích để xây dựng & sử dụng tính kế thừa (inheritance).

Vậy tính kế thừa trong php thì có những kiểu nào?

Các kiểu của tính kế thừa trong PHP

PHP suport nhiều kiểu trong tính kế thừa, bảng dưới đây là mục lục các kiểu của tính kế thừa & tình trạng suport trong php.

Inheritance typesupport in PHPSingle inheritanceyesMultilevel inheritanceyesHierarchical inheritanceyesMultiple inheritancesno

Tất cả chúng ta sẽ tìm tòi & lấy chẳng hạn từng kiểu của tính kế thừa nhé:

1. Single inheritance.

Single inheritance trong PHP được khái niệm là một lớp (class) có thể kế thừa với chỉ 1 lớp class khác. Tất cả chúng ta phải có 2 class trong quy trình này, 1 class là class cha (parent class) & 1 class con (child class). Tất cả chúng ta hãy xem ví dự ở dưới đây nhé:

<?php
class CarfiveSeater {
    public $color;
    private $numberChair;
    private $brand;

    function __construct($brand)
    {
        $this->numberChair = 5;
        $this->brand = $brand;
    }

    // get brand
    public function getBrand() {
        return $this->brand;
    }

    // get Number chair
    public function getNumberChair(){
        return $this->numberChair;
    }
}

class Mercedes extends CarfiveSeater {

    protected $model = "c300";

    protected $pricing; // giá

    protected $yearManufacture; // Năm sản xuất

    public function __construct($pricing, $yearManufacture) {
        parent::__construct(Toyota::class);

        $this->pricing = $pricing;
        $this->yearManufacture = $yearManufacture;
    }

    public function getPricing(){
        return $this->pricing;
    }
    
    public function getYearManufacture(){
        return $this->yearManufacture;
    }

    public function getModel() {
        return $this->model;
    }
}

$pricing = "20,000"; // unit dolars
$yearManufacture = "2020";
$mercedes = new Mercedes($pricing, $yearManufacture);
$mercedes->color = "black";

echo "<br>Số hiệu: ". $mercedes->getModel(). '<brvàgt;';
echo "Nhãng hiệu: ".$mercedes->getBrand().'<brvàgt;';
echo "Số chỗ ngồi: ". $mercedes->getNumberChair(). '<brvàgt;';
echo "Giá tiền: ". $mercedes->getPricing().'<brvàgt;';
echo "Năm sản xuất: ". $mercedes->getYearManufacture().'<brvàgt;';
echo "Màu sắc: ".$mercedes->color;

?>

Output:

Số hiệu: c300
Nhãng hiệu: Toyota
Số chỗ ngồi: 5
Mức giá: 20,000
Năm sản xuất: 2020
Màu sắc: black

Giải thích:

  • Tất cả chúng ta có class Mercerdes kế thừa từ class CarfiveSeater nên class con là Mercerdes, class cha là CarfiveSeater.
  • Class Mercerdes được kế thừa những đặc điểm & bí quyết từ class cha (CarfiveSeater).
  • Đặc điểm kế thừa (Attributes): $color, $numberChair, $brand.
  • Công thức kế thừa (Methods): getBrand(), getNumberChair().
  • Class Mercerdes cũng được mở rộng thêm các đặc điểm: $model, $pricing, $yearManufacture. Công thức getPricing(), getYearManufacture(), getModel().
  • Các đặc điểm (attributes) and bí quyết (methods) được kế thừa thì tất cả chúng ta cũng sẽ sử dụng được thông qua class con là Mercerdes, theo chẳng hạn ở trên là tất cả chúng ta sử dụng: Attributes: $color. Methods: $getBrand(), $getNumberChair(). thông qua đối tượng $mercerdes được khởi tạo.
    Note: Tất cả chúng ta chỉ có thể truy cập được những methods and attributes từ class con ($mercedes) có kiểu public, còn protected/private thì tất cả chúng ta chẳng thể truy cập được vào. Nếu bạn mong muốn truy cập thì phải thông qua 1 hàm public bên trong class khởi tạo nó: chẳng hạn như là hàm getBrand() để get private $brand từ class cha.

2. Multilevel inheritance

Multilevel inheritance trong PHP nó như tên gọi của nó. Các class được kế thừa qua nhiều level.

Chẳng hạn: tất cả chúng ta có 3 class là : class ?, class Ɓ, class ₵. thì Multilevel inheriance sẽ là: class Ɓ kế thừa từ class ?, class ₵ kế thừa từ class Ɓ. Như thế thông qua đó class ₵ sẽ được có các đặc điểm & bí quyết của class Ɓ & class ₵.

Tất cả chúng ta cùng xem chẳng hạn dưới đây nhé:

<?php
class CarfiveSeater {
    public $color;
    private $numberChair;
    private $brand;

    function __construct($brand)
    {
        $this->numberChair = 5;
        $this->brand = $brand;
    }

    // get brand
    public function getBrand() {
        return $this->brand;
    }

    // get Number chair
    public function getNumberChair(){
        return $this->numberChair;
    }
}

class Mercedes extends CarfiveSeater {

    protected $model = "c300";

    protected $pricing; // giá

    protected $yearManufacture; // Năm sản xuất

    public function __construct($pricing, $yearManufacture) {
        parent::__construct(Toyota::class);

        $this->pricing = $pricing;
        $this->yearManufacture = $yearManufacture;
    }

    public function getPricing(){
        return $this->pricing;
    }
    
    public function getYearManufacture(){
        return $this->yearManufacture;
    }

    public function getModel() {
        return $this->model;
    }
}

class MercedesBlack extends Mercedes {

    public function __construct() {
        $pricing = "20,000"; // unit dolars
        $yearManufacture = "2020";
        parent::__construct($pricing, $yearManufacture);
        $this->color = "black";
    }
}

$mercedesBlack = new MercedesBlack();

echo "<br>Số hiệu: ". $mercedesBlack->getModel(). '<brvàgt;';
echo "Nhãng hiệu: ".$mercedesBlack->getBrand().'<brvàgt;';
echo "Số chỗ ngồi: ". $mercedesBlack->getNumberChair(). '<brvàgt;';
echo "Giá tiền: ". $mercedesBlack->getPricing().'<brvàgt;';
echo "Năm sản xuất: ". $mercedesBlack->getYearManufacture().'<brvàgt;';
echo "Màu sắc: ".$mercedesBlack->color;

Output:
Số hiệu: c300
Nhãng hiệu: Toyota
Số chỗ ngồi: 5
Mức giá: 20,000
Năm sản xuất: 2020
Màu sắc: black

Giải thích: Vì class MercedesBlack thừa kế class Mercedes, mà class Mercedes lại thừa kế class CarfiveSeater, nên class MercedesBlack cũng có các methods and attributes của class CarfiveSeater. thì người ta gọi này là multilevel inheritance.

3. Hierarchical inheritance

Hierarchical inheritance trong PHP là 1 class cha (parent class) nhưng được thừa kế hơn bưởi hơn 1 class con.

Chẳng hạn:

<?php
class CarfiveSeater {
    public $color;
    private $numberChair;
    private $brand;

    function __construct($brand)
    {
        $this->numberChair = 5;
        $this->brand = $brand;
    }

    // get brand
    public function getBrand() {
        return $this->brand;
    }

    // get Number chair
    public function getNumberChair(){
        return $this->numberChair;
    }
}

class Mercedes extends CarfiveSeater {

    protected $model = "c300";

    protected $pricing; // giá

    protected $yearManufacture; // Năm sản xuất

    public function __construct($pricing, $yearManufacture) {
        parent::__construct(Toyota::class);

        $this->pricing = $pricing;
        $this->yearManufacture = $yearManufacture;
    }

    public function getPricing(){
        return $this->pricing;
    }
    
    public function getYearManufacture(){
        return $this->yearManufacture;
    }

    public function getModel() {
        return $this->model;
    }
}

class MercedesBlack extends Mercedes {

    public function __construct() {
        $pricing = "20,000"; // unit dolars
        $yearManufacture = "2020";
        parent::__construct($pricing, $yearManufacture);
        $this->color = "black";
    }
}

class MercedesWhite extends Mercedes {

    public function __construct() {
        $pricing = "20,000"; // unit dolars
        $yearManufacture = "2020";
        parent::__construct($pricing, $yearManufacture);
        $this->color = "white";
    }
}


$mercedesBlack = new MercedesBlack();
echo "<br>MercedesBlack<br>";
echo "Số hiệu: ". $mercedesBlack->getModel(). '<brvàgt;';
echo "Nhãng hiệu: ".$mercedesBlack->getBrand().'<brvàgt;';
echo "Số chỗ ngồi: ". $mercedesBlack->getNumberChair(). '<brvàgt;';
echo "Giá tiền: ". $mercedesBlack->getPricing().'<brvàgt;';
echo "Năm sản xuất: ". $mercedesBlack->getYearManufacture().'<brvàgt;';
echo "Màu sắc: ".$mercedesBlack->color.'<brvàgt;';



$mercedesWhite = new MercedesWhite();
echo "<br>MercedesWhite<br>";
echo "Số hiệu: ". $mercedesWhite->getModel(). '<brvàgt;';
echo "Nhãng hiệu: ".$mercedesWhite->getBrand().'<brvàgt;';
echo "Số chỗ ngồi: ". $mercedesWhite->getNumberChair(). '<brvàgt;';
echo "Giá tiền: ". $mercedesWhite->getPricing().'<brvàgt;';
echo "Năm sản xuất: ". $mercedesWhite->getYearManufacture().'<brvàgt;';
echo "Màu sắc: ".$mercedesWhite->color;

Giải thích: Vì class MercedesBlack & class MercedesWhite đều kế thừa từ class Mercedes nên chúng đều có các attributes and methods của class Mercedes

Kết luận tính kế thừa trong php (inheritance)

  • khả năng tái sử dụng của gift code là một trong những cách thường xuyên nhất sử dụng trong tính kế thừa. class cha như là một di sản trong những quá trình. Như tất cả chúng ta có thể thấy trong các chẳng hạn tính kế thừa ở trên, gift code được sử dụng lại ở nhiều class. Tất cả chúng ta không cần phải viết lại những đoạn gift code giống nhau lặp đi lặp lại.
  • Một class cha có thể được kế thừa trong nhiều class vậy nên tất cả chúng ta xây dựng kết cấu gift code rất linh động & khoa học.
  • Khả năng mở rộng là lợi thế của tính kế thừa. Nghĩa là tất cả chúng ta mở rộng class cha qua nhiều class con để giải quyết yêu cầu một cách chuẩn xác mà không tác động tới các logic liên quan.
  • Sự ghi đè cũng là một lợi thế khác của tính kế thừa. Với chức năng này tất cả chúng ta có thể ghi đè methods được kế thừa từ class cha, để biến đổi yêu cầu với những trường hợp tách biệt.
  • Vì đoạn gift code được tại sử dụng nên tất cả chúng ta sẽ được gift code sẽ it hơn, gọn nhẹ hơn đối với cách viết code truyền thống.
  • Tính kế thừa cũng có chức năng ẩn dữ liệu. Tất cả chúng ta có thể làm chủ truy xuất được yêu cầu từ class con bằng cách dùng public, protected, private
  • Hoàn toàn suport cầu trúc MVC, MVP, MVVM
  • PHP không suport multiple inheritances. Nhưng thay vào đó tất cả chúng ta có thể thay bằng cách dùng trains and interface trong php. đón xem những bài sau để cùng tìm tòi nhé.
Xem Thêm  Cách tạo trang web 2022: Hướng dẫn từng bước hoàn chỉnh - chia sẻ theme wordpress

Viết một bình luận