Bài 15: Template interface trong php

Cú pháp : interface [interfaceName] Thoạt nhìn qua các ta thấy Interface rất giống với Abstract trong php ? Nhưng về bản chất bên trong hoàn toàn khác nhau. Interface không phải là một lớp cụ thể mà là một khuôn mẫu để cho một đối tượng implement nó, và đương nhiên là ta không thể tạo một biến ...

Cú pháp: interface [interfaceName]

Thoạt nhìn qua các ta thấy Interface rất giống với Abstract trong php ? Nhưng về bản chất bên trong hoàn toàn khác nhau. Interface không phải là một lớp cụ thể mà là một khuôn mẫu để cho một đối tượng implement nó, và đương nhiên là ta không thể tạo một biến Interface. Ngược lại lớp Abstract là một lớp cụ thể, có đầy đủ các tính chất của một đối tượng, có thể gọi, định nghĩa các hàm trong nó. Đối với hằng số ở lớp implement không được định nghĩa lại.

Một số điểm cần lưu ý khi làm việc với interface.

  • Lớp kế thừa không được định nghĩa lại hằng số đã được định nghĩa trong interface.
  • Định nghĩ đúng các hàm của lớp kế thừa như trong interface.
  • Định nghĩa đúng mức truy cập các hàm của lớp kế thừa như trong interface.
  • Một interface chứa các hành vi(Action) mà một class(lớp) triển khai.
  • Một interface có thể bao gồm bất cứ lượng phương thức nào.
  • Bạn không thể khởi tạo một interface.
  • Một interface không chứa bất cứ hàm contructor nào.
  • Tất cả các phương thức của interface đều là abstract.
  • Một interface không thể chứa một trường nào trừ các trường vừa static và final.
  • Một interface không thể kế thừa từ lớp, nó được triển khai bởi một lớp.
  • Một interface có thể kế thừa từ nhiều interface khác.

Ví dụ:

interface PrintTable
{
    // Phương thức In
    public function _print();
}
interface PrintColor
{
     // Phương thức thiết lập màu sắc
    public function _setcolor();
}

class Page
{
    // Phương thức setup bố cục
    public function PageSetup(){
        // Lệnh
    }
}
class A6 extends Page implements PrintTable,PrintColor{
    public function _print(){
        echo 'Phương thức in khổ giấy A6';
    }
    public function _setcolor(){
        echo 'Mãu chữ in khổ giấy A6';
    }
}
$a6 = new A6;
$a6->_print();

2. Tính chất kế thừa interface trong PHP

Interface trong php tuy không phải là một lớp chính hiệu nhưng nó cũng có một tính chất đó là tính kế thừa, nghĩa là một Interface A có thể kế thừa một Interface B thì lúc này đối tượng nào implement lớp A thì nó phải định nghĩa tất cả các hàm mà cả hai lớp A và B đã khai báo.

Ví dụ:

interface A{
    public function funcA();
}
interface B extends A{
    public function funcB();
}  
// Lớp này đúng vì nó khai báo đầy
// đủ các hàm trong A và B
class C implements B{
    public function funcA(){
        // Lệnh
    }
    public function funcB(){
        // Lệnh
    }
}
// Lớp này sai vì nó khai báo mỗi hàm funcA
class D implements B{
    public function funcA(){
        // Lệnh
    }
}
0