Interface trong php là gì

Tiếp tục với series học lập trình PHP hướng đối tượng, bài này chúng ta sẽ tìm hiểu về interface template trong hướng đối tượng.

1, Interface là gì? và tính chất.

Interface là gì?

-Interface trong hướng đối tượng là một khuôn mẫu, giúp cho chúng ta tạo ra bộ khung cho một hoặc nhiều đối tượng và nhìn vào interface thì chúng ta hoàn toàn có thể xác định được các phương thức và các thuộc tính cố định (hay còn gọi là hằng) sẽ có trong đối tượng implement nó.

-Để khai báo interface trong PHP chúng ta dùng cú pháp:

interface InterfaceName
{
    //code
}

Trong đó: InterfaceName là tên của interface các bạn muốn đặt.

VD: Mình sẽ tạo ra interface DongVat.

interface DongVat
{
    //code
}

Tính chất của interface.

-Sau đây mình sẽ liệt kê ra các tính chất của interface:

  • Interface không phải là một đối tượng.
  • Trong interface chúng ta chỉ được khai báo phương thức chứ không được định nghĩa chúng.
  • Trong interface chúng ta có thể khai báo được hằng nhưng không thể khai báo biến.
  • Một interface không thể khởi tạo được (vì nó không phải là một đối tượng).
  • Các lớp implement interface thì phải khai báo và định nghĩa lại các phương thức có trong interface đó.
  • Một class có thể implement nhiều interface.
  • Các interface có thể kế thừa lẫn nhau.

2, Các ví dụ.

VD1: Chỉ được khai báo phương thức chứ không được định nghĩa chúng trong interface.

interface DongVat
{
    //đúng vì chúng ta chỉ khai báo phương thức trong interface
    public function setName();

    //Sai vì chúng ta không được định nghĩa phương thức trong interface
    public function getName()
    {
        //
    }
}

VD2: Trong interface chúng ta chỉ được khai báo hằng không thể khai báo biến.

interface DongVat
{
    //đúng vì trong interface có thể khai báo hằng
    const CONNGUOI = False;

    //Sai vì trong interface không thể khai báo biến
    public $name;

}

VD3: Một interface không thể khởi tạo được.

interface DongVat
{
    //
}

//sai vì interface không thể khởi tạo được
$dongvat = new DongVat();

VD4: Các lớp implement lại interface thì phải khai báo và định nghĩa lại các phương thức có trong interface.

interface DongVat
{
    public function getName();
}

//Class này đúng vì đã khai báo và định nghĩa lại phương thức getName
//trong interface
class ConTrau implements DongVat
{
    private $name;

    public function getName()
    {
        return $this->name;
    }
}

//Class này sai vì chưa khai báo và định nghĩa lại phương thức getName
//trong interface
class ConBo implements DongVat
{
    private $name;

    public function setName($name)
    {
        $this->name = $name;
    }
}

VD5: Một class có thể implement  nhiều interface.

interface DongVat
{
    public function getName();
}

interface ConTrau
{
    public function checkSung();
}

class ConNghe implements DongVat, ConTrau
{
    private $name;

    const SUNG = false;

    public function getName()
    {
        return $this->name;
    }

    public function checkSung()
    {
        return self::SUNG;
    }
}

VD6: interface có thể kế thừa lẫn nhau.

interface DongVat
{
    public function getName();
}

interface ConTrau extends Dongvat
{
    public function checkSung();
}

class ConNghe implements ConTrau
{
    private $name;
    const SUNG = false;

    public function getName()
    {
        return $this->name;
    }

    public function checkSung()
    {
        return self::SUNG;
    }
}

3, Lời kết.

-Như vậy mình đã giới thiệu xong đến mọi người về interface trong hướng đối tượng nói chung và PHP nói riêng rồi, dựa vào bài này và bài trước đó (lớp trừu tượng abstract) các bạn hãy tự đưa ra cho mình các điểm khác nhau giữa interfaceabstract nhé! Bài tiếp theo chúng ta sẽ tìm hiểu về staticfinal trong hướng đối tượng.

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Bài Viết Mới

Interface trong php là gì

Đã đăng vào thg 5 21, 2018 1:38 CH 6 phút đọc

Giới thiệu

Nội dung

Đầu tiên chúng ta sẻ tìm hiểu khái niệm của chúng

1. Abstract Class là gì ?

  • Lớp trừu tượng đơn giản được xem như một class cha cho tất cả các Class có cùng bản chất.

  • Do đó mỗi lớp dẫn xuất (lớp con) chỉ có thể kế thừa từ một lớp trừu tượng bằng từ khóa extends.

  • Lớp con kế thừa từ lớp trừu tượng có thể override các phương thức trừu tượng trong đó.

  • Lớp trừu tượng có thể khai báo các thuộc tính và các phương thức bình thường và không có thuộc tính trừu tượng (lớp trừu tượng không cho phép khởi tạo tham số, chỉ khai báo mà thôi).

  • Bên cạnh đó nó không cho phép tạo instance, nghĩa là sẽ không thể tạo được các đối tượng thuộc lớp đó. Ví dụ Animal là 1 class trừu tượng thì không thể khai báo : $animal = new Animal

  • Các phương thức được định nghĩa là abstract trong abstract class thì chỉ khai báo tên hàm và không viết nội dung hàm trong đó. Nội dung sẻ được viết trong class kế thừa khi override lại phương thức đó.

Mình có 1 cái ví dụ đơn giản như thế này.

2. Interface là gì ?

  • Interface không phải là 1 lớp. Nó được mô tả như là 1 bản thiết kế cho các class có chung cách thức hoạt động.
  • Vì không phải là 1 lớp nên không thể định nghĩa các thuộc tính, khởi tạo đối tượng mà chỉ khai báo các phương thức.
  • Các phương thức chỉ khai báo tên hàm và không viết nội dung hàm trong đó.
  • Không có khái niệm phạm vi của phương thức, tất cả đều là public.
  • Lớp con kế thừa từ interface sẻ phải override tất cả các phương thức trong đó.
  • Một lớp có thể kế thừa từ nhiều interface khác nhau bằng từ khóa implements

Mình củng có ví dụ đơn giản về interface.

Khi nào dùng interface và khi nào dùng Abstract Class.

Đọc xong cái đống trên kia chắc bạn đang tự hỏi. Vậy Abstract và Interface có cách dùng khá giống nhau. Vậy tại sao phải tạo ra 2 cái làm gì ?

Interface trong php là gì
.

  • Nhìn chung abstract class và interface đều được coi như 1 "bản thiết kế" cho các class con kế thừa nó.

Vì sao lại gọi là "bản thiết kế"?

  • Gọi là "bản thiết kế" vì ví dụ như trong 1 dự án, bạn muốn ép buộc người lập trình phải tuân thủ theo một số các phương thức và các phương thức này đã được định nghĩa sẵn những thứ cơ bản, để giúp cho lập trình viên có thể kế thừa các phương thức này và phát triển lớp con của họ. Thì bạn phải tạo ra các abstract class hoặc interface và liệt kê các phương thức cần thiết trong đó. Do đó abstract class và interface chỉ chứa các khai báo mà không quan tâm bên trong các hàm thực hiện những gì.

Abstract Class là "bản thiết kế" cho Class:

  • Về bản chất thì abstract class là 1 class nên nó có thể khai báo thêm các thuộc tính và phương thức khác không phải trừu tượng. Nó được xem như "bản thiết kế" cho class vì những class extends lại từ nó ngoài override lại các phương thức trừu tượng của nó thì còn có thể sử dụng các thuộc tính của nó.
  • Trong ví dụ abstract class ở trên, 2 class kế thừa abstract class Animal đều có cùng bản chất là động vật. Chúng có thể sử dụng được biến $name trong abstract class Animal.

Interface là "bản thiết kế" cho Method:

  • Interface không phải là class nên chỉ dùng để khai báo các phương thức. Nó được xem như "bản thiết kế" cho method vì những class implements lại nó đều phải override lại các phương thức của nó.
  • Trong ví dụ interface ở trên, 2 class kế thừa từ interface Move không có cùng bản chất. 1 class thuộc động vật và 1 class thuộc phương tiện đi lại. Nhưng chúng có chung hành động là run().

Kết luận

Sau khi đọc bài này hy vọng các bạn sẻ hiểu hơn về abstract class và interface. Bài viết khá nhiều chữ nên chắc dể gây nhàm chán nhưng tổng kết lại chỉ có 1 số ý sau:

  • Abstract thường được sử dụng trong trường hợp các class kế thừa từ nó có cùng bản chất (thuộc 1 nhóm đối tượng)
  • Interface thường được sử dụng trong trường hợp các class kế thừa không có cùng bản chất (nhóm đối tượng) nhưng chúng có thể thực hiện các hành động giống nhau.

All rights reserved