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ề abstract và interface.
Class Abstraction là gì ?
-
Một lớp được khai báo dưới
abstract classlà 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
classcó methodabstract functionthìclassđó buộc phải là mộtabstract class. -
Các
abstract functionchỉ khai báo phương thức không thể chứa logic. Ví dụ:
abstract protected function getValue();
abstract protected function prefixValue($prefix);
- Một class con trong php chỉ được kế thừa từ một class cha và tuân thủ theo các quy tắc Inheritance và Signature compatibility.
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
interfacescho phép bạn khai báo cácmethodsmà mộtclassphả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';
}
}
-
Interfacessử dụng chungnamespacevớiclassesvàtraitsvì vậy tên của chúng không thể giống nhau. -
Interfacesđược xác định giống như mộtclassnhưng không phải là mộtclass. -
Trong
interfaceschỉ có thể khai báo cácmethods(cácmethodsnày không chứa bất kì một nội dung nào). -
Tất cả các
methodtrong interface đều ở dưới dạngpublic. -
Các
classcó thểimplementscácinterface. -
Các
interfacecó thểextendslẫ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ề abstract và interface 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