Hướng đối tượng có 4 tính chất đặc thù sau:

  • Tính kế thừa (inheritance).
  • Tính đa hình (polymorphism).
  • Tính trừu tượng (abstraction).
  • Tính đóng gói (encapsulation).

1. Tính kế thừa trong hướng đối tượng PHP

Là tính chất mà cho phép một lớp cha chia sẻ cho lớp con các phương thức và thuộc tính cho các lớp con. Các lớp con sẽ không cần định nghĩa lại nữa. Và tính kế thừa mình đã có bài học trước rồi nên sẽ không nói lại nữa, các bạn có thể xem lại nhé!

2. Tính trừu tượng trong hướng đối tượng PHP

Tính trừu tượng là quá trình đơn giản hóa một đối tượng. Nó sẽ ẩn đi những chi tiết triển khai mà thay vào đó là chỉ cung cấp các thông tin, tính năng tới người dùng. Quá trình trừu tượng hóa dữ liệu sẽ giúp ta xác định thuộc tính, hành động nào của đối tượng cần thiết sử dụng cho chương trình.

Thực ra thì lớp trừu tượng vẫn chỉ là một lớp. Nhưng nó trừu tượng ở chỗ là nó không thể được dùng để tạo ra những đối tượng như những lớp bình thường khác. Ta cứ coi như nó là một cái sườn và để ma ta sẽ tạo ra lớp con của nó dựa vào sự ràng buộc từ cái sườn này.

Tính trừu tượng thì được thể hiện qua abstract class và interface. Mình sẽ nói cụ thể về tính trừu tượng ở bài sau!

3. Tính đa hình trong hướng đối tượng PHP

Tính đa hình là tính chất mà các đối tượng thuộc lớp khác nhau có thể hiểu cùng một thông điệp theo cách khác nhau. Đối với tính chất này nó được thể hiện rõ nhất qua việc gọi phương thức của đối tượng. Các phương thức hoàn toàn có thể giống nhau, nhưng việc xử lý luồng có thể khác nhau. Ví dụ như việc ăn chẳng hạn các loại động vật ăn đều phải ăn và hiểu ăn là gì. Nhưng mỗi loài sẽ có một cách ăn và ăn những đồ ăn khác nhau.

Đó là việc đa hình ngoài cuộc sống để các bạn dễ hình dung. Còn trong lập trình thì được hiểu là lớp con sẽ viết lại những phương thức của lớp cha. Để thể hiện được tính đa hình trong hướng đối tượng thì các lớp phải có quan hệ kế thừa với cùng một lớp cha nào đó. Phương thức đa hình phải được ghi đè ở các lớp con(override).

Ví dụ:

class Hinh
{
    protected function tinhDienTich()
    {
        //code
    }
}

class HinhVuong extends Hinh
{
    private $canh;

    public function setCanh($canh)
    {
        $this->canh = $canh;
    }

    public function getCanh()
    {
        return $this->canh;
    }

    //xử lý tính diện tích của hình vuông
    public function tinhDienTich()
    {
        return pow($this->canh, 2);
    }
}

class HinhTron extends Hinh
{
    private $bankinh;

    public function setBanKinh($bankinh)
    {
        $this->bankinh = $bankinh;
    }

    public function getBanKinh()
    {
        return $this->bankinh;
    }

    //xử lý tính diện tích của hình tròn
    public function tinhDienTich()
    {
        return (pow($this->bankinh, 2) * pi());
    }
}

$hinhvuong = new HinhVuong();

$hinhvuong->setCanh(4);

echo $hinhvuong->tinhDienTich();
echo '
 ___________________________________________________ 
';
$hinhtron = new HinhTron();

$hinhtron->setBanKinh(4);

echo $hinhtron->tinhDienTich(); 

Ta thấy cùng là một phương thức tính diện tích, cùng trả về phương thức tính diện tích của hình nhưng luồng xử lý thì hoàn toàn khác nhau. Đó chính là tính đa hình trong hướng đối tượng.

4. Tính đóng gói trong hướng đối tượng PHP

Tính chất này không cho phép người dùng trực tiếp tác động đến dữ liệu bên trong đối tượng mà phải thông qua các phương thức mà đối tượng cung cấp. Chỉ có các hàm thành viên của đối tượng đó mới có quyền thay đổi trạng thái nội tại của nó mà thôi. Nếu các đối tượng khác muốn thay đổi thuộc tính thành viên của đối tượng thành viên nội tại, thì cần phải truyền thông điệp cho đối tượng, và việc quyết định có được thay đổi hay không thì cuối cùng vẫn do đối tượng nội tại quyết định. Trong PHP việc đóng gói được thực hiện nhờ sử dụng các từ khóa Public, Private và Protected. Và mình cũng đã nói về những từ khóa này ở bài trước nên các bạn cũng có thể xem lại nhé!

Tính chất này giúp đảm bảo tính toàn vẹn, bảo mật của đối tượng và dễ dàng quả lý và sử dụng.