Hướng đối tượng trong PHP: interface, asbtract class

  • PHP and Mysql
  • 25 tháng 07 2012
  • bởi Văn Khương
  • 0 Comments

Interface

Interface là một lớp rỗng chỉ chứa khai báo về tên phương thức không có khai báo về thuộc tính hay thứ gì khác và các phương thức này cũng là rỗng. Bởi vậy bất kỳ lớp nào sử dụng lớp interface đều phải định nghĩa các phương thức đã khai báo ở lớp interface, nếu cố tình không khai báo thì PHP sẽ báo lỗi, để sử dụng lớp interface bạn chỉ việc khai báo với từ khóa implements và một lớp có thể sử dụng nhiều interface cũng như vừa có thể kế thừa từ lớp khác và đồng thời sử dụng interface. Ví dụ:

interface a{
    public function pa();
}
interface b{
    public function pb();
}
class c{
    public function pc(){
        echo 'phuong thuc pc cua lop c';
    }
}
class d extends c implements a,b{
    public function pa(){
        echo 'phuong thuc pa duoc khai bao interface';
    }
    public function pb(){
        echo 'phuong thuc pb duoc khai bao interface';
    }
    public function pd(){
        echo 'phuong thuc pc cua lop d';
    }
}
$s = new d();
$s->pc();

Abstract class

Lớp asbtract cũng gần giống như interface, ngoại trừ nó có thể chứa phương thức và thuộc tính thông thường.

Trong lớp asbtract chứa các phương thức asbtract chúng cũng rỗng giống như phương thức trong interface, vậy nên khi một lớp kế thừa từ lớp asbtract thì bắt buộc phải định nghĩa phương thức đã khai báo ở lớp abstract.

Một lớp asbtract khi sử dụng cũng như kế thừa bạn khai báo với từ khóa "extends" điều này không giống như interface. Ví dụ:

abstract class a{
    protected $vara = 'pa2() cua lop a';
    abstract function pa();
    protected function pa2(){
        return $this->vara;
    }
}
class b extends a{
    public function pa(){
        echo 'pa() duoc khai bao abtract o lop a';
    }
    public function pb(){
        echo $this->pa2();
    }
}
$s = new b();
$s->pb();

Một điều chú ý nữa là bạn có thể sử dụng cả interface và kế thừa lớp abstract trong cùng một lớp.

Vậy ứng dụng của interface và abstract class để làm gì khi ta có thể xây dựng các lớp cơ sở và sau đó xây dựng các lớp kế thừa một cách thông thường ? vấn đề ở đây chính là tính chặt chẽ của mô hình khi chúng ta có những phương thức chung để định nghĩa cho một cái gì đó mà nó có các cá thể bắt buộc phải có những đặc điểm trên.

Tham khảo "object-oriented programming with PHP5 _ Hasin Hayder".

  • Chia sẻ
comments powered by Disqus