Interface trong PHP - Tất tần tật về giao diện PHP mà bạn phải biết
04/06/2021 01:41
Trong bài viết này chúng ta sẽ tìm hiểu về Interface trong PHP cùng một số cách đặt tên và triển khai Interface trong ngôn ngữ lập trình PHP
Interface trong PHP là gì?
Interface hay còn gọi là giao diện trong PHP là một khuôn mẫu, giúp ta tạo khung cho một hoặc nhiều đối tượng. Nếu coi PHP là bản thiết kế cho các đối tượng thì một giao diện là bản thiết kế cho các lớp. Bất kỳ lớp nào implement một interface đã cho sẽ có cùng các hành vi về những gì nó có thể được gọi, cách nó được gọi và kết quả nó trả về.
Khái niệm Interface trong PHP
Interface trong PHP cơ bản
Chúng ta có thể lấy ví dụ về những thứ có thể phát ra âm thanh để dễ dàng hình dùng về Interface cơ bản trong PHP. Trong thực tế, đây có thể là tiếng chim (kêu), chó (sủa) hoặc người (hát),... Chi tiết mỗi âm thanh đều khác nhau nhưng nói chung, chúng đều có một thuộc tính là có thể phát ra âm thanh.
Ta có thể ví dụ như sau:
interface Vocalizer
{
public function vocalize(string $message): string;
}
Trong ví dụ trên, cho một thông điệp string $, vocalize () sẽ trả về những gì được nghe dưới dạng một chuỗi.
Một interface sẽ không tự làm bất kỳ điều gì. Thay vào đó, nó hoạt động như một kiểu trong PHP. Điều này có nghĩa là bạn có thể nhập gợi ý vào nó dưới dạng đối số hoặc trẻ về một thứ gì đó thuộc loại đó từ một hàm hoặc phương thức.
Để tạo ra một yếu tố thuộc loại đó, chúng ta cần một bản triển khai có sẵn. Các lớp có thể triển khai một interface như sau:
class Bird implements Vocalizer
{
public function vocalize(string $message): string
{
return sprintf('<tweet>%s</tweet>', $message);
}
}
Giả sử chúng ta có một chức năng sau:
function prepareMessage(string $message, Vocalizer $vocalizer): string
{
return $vocalizer->vocalize($message);
}
Hàm trên có thể được gọi với bất kỳ vocalizer $ nào, ví dụ:
$chickadee = new Bird();
echo prepareMessage('a song', $chickadee); // "<tweet>a song</tweet>"
Kế thừa và thay thế interface trong PHP
Tóm lại, interface trong PHP cung cấp cho chúng ta cách để cung cấp các tính năng mà không yêu cầu kế thừa lớp. Điều này sẽ vô cùng hữu ích để điều chỉnh các lớp hiện có để dễ dàng hoạt động trong các ngữ cảnh khác nhau.
Giả sử ta có một lớp là Bird không triển khai Vocalizer, nhưng về cơ bản đã có chức năng tương đương thông qua phương thức tweet () như sau:
class Bird
{
public function tweet(string $message): string
{
return sprintf('<tweet>%s</tweet>', $message);
}
}
>>> Tham khảo: Khóa học lập trình PHP
Năm nguyên tắc trong lập trình hướng đối tượng PHP
Khi thực hiện lập trình hướng đối tượng, có một bộ năm nguyên tắc thiết kế cốt lõi được khuyến nghị để tạo kiến trúc linh hoạt, có thể bảo trì được gọi là nguyên tắc SOLID :
- Nguyên tắc một người chịu trách nhiệm
- Nguyên tắc đóng mở
- Nguyên tắc thay thế Liskov
- Nguyên tắc phân tách giao diện
- Nguyên tắc nghịch đảo phụ thuộc
>>> Đọc thêm: Toán tử bậc ba trong PHP - Tìm hiểu về toán tử bậc ba
Xác định các yếu tố trong Interface trong PHP
Bây giờ chúng ta đã có ý tưởng cơ bản về giao diện là gì, tại sao chúng ta có thể sử dụng một giao diện và làm thế nào chúng ta có thể triển khai một giao diện? Chúng ta có thể xác định chính xác điều gì trong một giao diện?
Các giao diện trong PHP được giới hạn ở:
- Các phương thức hiển thị công khai.
- Hằng số hiển thị công khai.
Khả năng hiển thị của interface trong php giúp người dùng khi nhìn vào interface có thể xác định được các phương thức hay các thuộc tính cố định (hay hằng số) sẽ có trong đối tượng implement nó.
Cách triển khai nhiều Interface trong PHP
Để triển khai nhiều giao diện interface, bạn sẽ cần cung cấp danh sách các giao diện được phân tách bằng dấu phẩy theo sau các từ khóa triển khai khi khai báo lớp. Ví dụ như sau:
class MyCustomStorageAdapter extends AbstractAdapter implements
ClearByStorageInterface,
FlushableInterface,
OptimizableInterface,
TaggableInterface
{
// . . .
}
>>> Đọc thêm: Session trong PHP - 10 phút tìm hiểu nhanh về session trong PHP
Cách đặt tên Interface trong PHP
Bạn nên đặt tên giao diện của mình như thế nào? Nói chung, đặt tên cho nó dựa trên các hành vi mà nó mô tả. Theo ví dụ ở đây, chúng tôi đang xác định một thứ gì đó có thể phát ra âm thanh, nên giao diện sẽ được đặt tên là Vocalizer.
Cách đặt tên Interface trong PHP
Tuy vậy, việc đặt tên có thể trở nên khó khăn, nếu bạn trích xuất một giao diện từ một lớp mà bạn đã xác định trước đó. Trong đó tên logic đã là tên của một lớp hiện có.
Trong một số trường hợp khác, bạn có thể gặp khó khăn khi đặt tên giao diện khi dự án được thực hiện từ các nền tảng, hoặc quốc gia khác nhau. Nguyên nhân có thể là do các thành viên trong dự án không chia sẻ cùng một ngôn ngữ mẹ đẻ.
So sánh Interface với Lớp trừu tượng
Giao diện tương tự như các lớp trừu tượng. Sự khác biệt giữa các giao diện và các lớp trừu tượng là:
- Giao diện không thể có thuộc tính, trong khi các lớp trừu tượng có thể
- Tất cả các phương thức giao diện phải là công khai, trong khi các phương thức lớp trừu tượng là công khai hoặc được bảo vệ
- Tất cả các phương thức trong một giao diện là trừu tượng, vì vậy chúng không thể được triển khai trong mã và từ khóa trừu tượng là không cần thiết
- Các lớp có thể triển khai một giao diện đồng thời kế thừa từ một lớp khác
Kết luận: Trên đây là một số kiến thức về Interface trong PHP. Đây là bước đầu tiên để tìm hiểu về ngôn ngữ này, hy vọng bài viết hữu ích với bạn trong quá trình học lập trình với PHP. Tìm hiểu thêm về các ngôn ngữ lập trình thông qua khóa học lập trình tại Viện công nghệ thông tin T3H bạn nhé!