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 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ó methodabstract function
thìclass
đó buộc phải là mộtabstract 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);
- 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
interfaces
cho phép bạn khai báo cácmethods
mà mộtclass
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 chungnamespace
vớiclasses
vàtraits
vì vậy tên của chúng không thể giống nhau. -
Interfaces
được xác định giống như mộtclass
nhưng không phải là mộtclass
. -
Trong
interfaces
chỉ có thể khai báo cácmethods
(cácmethods
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ạngpublic
. -
Các
class
có thểimplements
cácinterface
. -
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ề 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