Abstract và interfaces trong php

Mọi người đều biết php là ngôn ngữ lập trình hướng đối tượng, và nó có 4 tính chất cơ bản là:

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

Trừu tượng hóa là quá trình đơn giản hóa một đối tượng mà trong đó chỉ bao gồm những đặc điểm quan tâm và bỏ qua những đặc điểm chi tiết nhỏ. Quá trình trừu tượng hóa dữ liệu giúp ta xác định được những 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.

Để hiểu rõ về tính trừu tượng chúng ta sẽ tìm hiểu về abstractinterface.

Class Abstraction là gì ?

  • Một lớp được khai báo dưới abstract class là một lớp trừu tượng.

  • Không thể khởi tạo một lớp abstract class.

  • Nếu một class có method abstract function thì class đó buộc phải là một abstract class.

  • Các abstract function chỉ khai báo phương thức không thể chứa logic. Ví dụ:

abstract protected function getValue();  
abstract protected function prefixValue($prefix);  

Ví dụ:

<?php  
abstract class AbstractClass  
{
    // abstract function chỉ cần xác định đối số bắt buộc.
    abstract protected function prefixName($name);

}

class ConcreteClass extends AbstractClass  
{

    // Lớp con chứa phần xử lý logic.
    // Lớp con có thể thêm arguments mà lớp cha không có. 
    public function prefixName($name, $separator = ".") {
        if ($name == "Pacman") {
            $prefix = "Mr";
        } elseif ($name == "Pacwoman") {
            $prefix = "Mrs";
        } else {
            $prefix = "";
        }
        return "{$prefix}{$separator} {$name}";
    }
}

$class = new ConcreteClass;
echo $class->prefixName("Pacman"), "\n";  
echo $class->prefixName("Pacwoman"), "\n";  
?>

Object Interfaces là gì ?

  • Các interfaces cho phép bạn khai báo các methods mà một class phải triển khai mà không cần xác định cách các phương thức này phải triển khai.

Ví dụ:

interface Runable  
{
    public function walk($step);
}

abstract class Animal  
{
    abstract function eat();
}
// Chỉ khi nào class của bạn implements Runable thì bạn mới cần triển khai method walk.
class Dog implements Runable  
{
    public function eat($food) 
    {
        echo '$food';
    }

    public function walk($step) 
    {
        echo '$step';
    }
}
  • Interfaces sử dụng chung namespace với classestraits vì vậy tên của chúng không thể giống nhau.

  • Interfaces được xác định giống như một class nhưng không phải là một class.

  • Trong interfaces chỉ có thể khai báo các methods (các methods này không chứa bất kì một nội dung nào).

  • Tất cả các method trong interface đều ở dưới dạng public.

  • Các class có thể implements các interface.

  • Các interface có thể extends lẫn nhau.

Sử dụng interfaces, abstract khi nào ?

Khi một nhóm đối tượng có cùng bản chất kế thừa từ một class thì sử dụng abstract class.
Ví dụ:

class Dog extends Animal  
class Cat extends Animal  

Khi một nhóm đối tượng không có cùng bản chất nhưng chúng có hành động giống nhau thì sử dụng interfaces.
Ví dụ:

class Motorbike extends Robot  
class Dog extends Animal

class Dog implements Run  
class Motorbike implements Run  

Kết luận

Trên đây là một số kiến thức cơ bản về abstractinterface trong php. Kiến thức mình có gì sai sót xin mọi người thoải mái góp ý để mình hoàn thiện bài viết. Cảm ơn đã đọc bài viết của mình !!!
Nguồn:
https://www.php.net/manual/en/language.oop5.interfaces.php
https://www.php.net/manual/en/language.oop5.abstract.php

Related article