PHP: Interface

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Đối tượng interface (giao diện) cho phép bạn tạo mã lệnh để xác định những phương thức mà một lớp phải thực thi, bạn không được định nghĩa những phương thức trong interface mà chỉ được khai báo chúng.

Việc định nghĩa interface cũng giống như định nghĩa một lớp chỉ khác là ta dùng từ khóa interface thay cho từ khóa class và không có bất kỳ một phương thức nào được định nghĩa trong đó.

Tất cả các phương thức trong interface đều phải là public (đây là tầm vực duy nhất sử dụng được trong interface).

Thực thi interface

Để thực thi một interface thì ta sử dụng toán tử implements. Tất cả các phương thức trong interface phải được thực thi trong lớp class nếu không sẽ phát sinh lỗi. Mỗi lớp có quyền thực thi nhiều interface, khi đó ta dùng dấu phẩy (,) để phân cách các interface.

Lưu ý:

Trước PHP 5.3.9, một lớp không được phép thực thi hai interface mà có chứa phương thức cùng tên vì điều này sẽ gây ra sự mơ hồ. Các phiên bản hiện tại cho phép điều này miễn là các phương thức cùng tên phải có cùng signature.

Interface cũng có quyền mở rộng giống như lớp bằng cách sử dụng từ khóa extends.

Lớp thực thi interface thì phải sử dụng đúng phương thức của interface đó với tên và signature y như đã được khai báo ở interface.

Hằng

Interface được quyền chứa các hằng. Các hằng của interface làm việc như là các hằng của lớp ngoại trừ chúng không thể được ghi đè bởi lớp/interface thừa kế.

Ví dụ

Ví dụ 1: Ví dụ Interface

<?php

// Khai báo interface 'iTemplate'
interface iTemplate
{
    public function 
setVariable($name$var);
    public function 
getHtml($template);
}


// Thực thi interface
class Template implements iTemplate
{
    private 
$vars = array();
  
    public function 
setVariable($name$var)
    {
        
$this->vars[$name] = $var;
    }
  
    public function 
getHtml($template)
    {
        foreach(
$this->vars as $name => $value) {
            
$template str_replace('{' $name '}'$value$template);
        }
 
        return 
$template;
    }
}


// Phát sinh lỗi: lớp BadTemplate không thực thi đầy đủ các phương thức của interface
class BadTemplate implements iTemplate
{
    private 
$vars = array();
  
    public function 
setVariable($name$var)
    {
        
$this->vars[$name] = $var;
    }
}

?>

Ví dụ 2: Mở rộng interface

<?php
interface a
{
    public function 
foo();
}

interface 
extends a
{
    public function 
baz(Baz $baz);
}


class implements b
{
    public function 
foo()
    {
    }

    public function 
baz(Baz $baz)
    {
    }
}


// Phát sinh lỗi: signature của phương thức baz() không giống với khai báo ở interface b
class implements b
{
    public function 
foo()
    {
    }

    public function 
baz(Foo $foo)
    {
    }
}

?>

Ví dụ 3: Thừa kế nhiều interface

<?php
interface a
{
    public function 
foo();
}

interface 
b
{
    public function 
bar();
}

interface 
extends ab
{
    public function 
baz();
}

class 
implements c
{
    public function 
foo()
    {
    }

    public function 
bar()
    {
    }

    public function 
baz()
    {
    }
}

?>

Ví dụ 4: Hằng trong interface.

<?php
interface a
{
    const 
'Interface constant';
}


// In ra: Interface constant
echo a::b;

// Phát sinh lỗi: không được ghi đè hằng của interface.
class implements a
{
    const 
'Class constant';
}

?>

» Tiếp: Ngoại lệ (Exception)
« Trước: Từ khóa final
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!