Giới thiệu về giao diện
Thuộc phần Lập trình hướng đối tượng trong hành trình PHP của Coddy. Bài học 27 trên 91.
Interface xác định một hợp đồng mà các lớp phải tuân theo. Khác với lớp trừu tượng có thể chứa cả phương thức trừu tượng lẫn phương thức cụ thể, interface chỉ khai báo chữ ký phương thức mà không có phần triển khai. Hãy xem interface như một lời hứa: mọi lớp triển khai interface đều cam kết cung cấp những phương thức cụ thể đó.
Bạn định nghĩa một interface bằng từ khóa interface:
<?php
interface Printable {
public function print();
}
Giao diện này quy định mọi lớp triển khai Printable phải có phương thức print(). Giao diện không quan tâm phương thức hoạt động như thế nào, chỉ cần phương thức đó tồn tại.
Đây là một ví dụ đơn giản cho thấy cấu trúc cơ bản:
<?php
interface Drivable {
public function start();
public function stop();
}
Lưu ý rằng các phương thức trong interface không có phần thân, chỉ có chữ ký kết thúc bằng dấu chấm phẩy. Tất cả phương thức trong interface đều mặc định là public, vì vậy bạn không thể dùng private hoặc protected.
Interface rất hữu ích vì chúng cho phép các lớp không liên quan chia sẻ hành vi chung. Car và Motorcycle có thể không có điểm chung nào về kế thừa, nhưng cả hai đều có thể triển khai Drivable để đảm bảo có các phương thức start() và stop().
Điểm chính: Interface quy định một lớp phải có những phương thức nào, chứ không quy định chúng hoạt động ra sao. Interface đặt ra một hợp đồng mà các lớp triển khai phải đáp ứng.
Thử thách
DễHãy xây dựng một hệ thống nhắn tin đơn giản để làm quen với giao diện. Bạn sẽ định nghĩa một giao diện, quy định cách xử lý tin nhắn và làm nền tảng cho các lớp triển khai mà bạn sẽ tạo trong bài học tiếp theo.
Bạn sẽ sắp xếp code trong hai tệp:
Messageable.php: Định nghĩa một giao diện có tênMessageable, khai báo chữ ký của hai phương thức:compose($content)để tạo tin nhắn vàdeliver()để gửi tin nhắn. Hãy nhớ rằng phương thức trong giao diện không có phần thân, chỉ có chữ ký kết thúc bằng dấu chấm phẩy.main.php: Tải tệp Messageable. Để xác minh giao diện được định nghĩa chính xác, hãy dùng hàminterface_exists()của PHP để kiểm tra xemMessageablecó tồn tại hay không. Sau đó, dùngReflectionClassđể kiểm tra giao diện và liệt kê các phương thức của nó. Tạo một đối tượng phản chiếu của giao diện, lấy các phương thức bằnggetMethods()(hàm này trả về các đối tượngReflectionMethod) và in tên của từng phương thức bằnggetName()trên một dòng riêng.
Đầu ra của bạn cần hiển thị tên của hai phương thức mà giao diện khai báo, mỗi tên trên một dòng riêng, theo thứ tự bạn đã định nghĩa.
Thử thách này chỉ tập trung vào việc định nghĩa giao diện, tức hợp đồng mà các lớp trong tương lai cần đáp ứng. Bạn xác định những phương thức nào phải tồn tại mà chưa cần quan tâm chúng hoạt động ra sao. Phần triển khai sẽ có trong bài học tiếp theo!
Tự làm thử
<?php
// Nạp tệp giao diện Messageable
require_once 'Messageable.php';
// TODO: Dùng interface_exists() để kiểm tra giao diện Messageable có tồn tại không
// TODO: Tạo đối tượng ReflectionClass cho giao diện Messageable
// TODO: Lấy các phương thức bằng getMethods()
// TODO: Duyệt qua các phương thức và in tên từng phương thức trên một dòng riêng
?>Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Lập trình hướng đối tượng
1Nền tảng về OOP
Tệp bên ngoàiGiới thiệu về OOPLớp và đối tượngTừ khóa $thisPhương thứcThuộc tínhHàm khởi tạo (__construct)Hàm hủy (__destruct)Ôn tập: máy tính đơn giản4Kế thừa
Kế thừa cơ bảnTừ khóa parent::Ghi đè phương thứcTừ khóa finalLớp trừu tượngÔn tập: hệ thống phân cấp nhân viên7Đóng gói
Công khai, được bảo vệ, riêng tưTìm hiểu sâu về bộ điều chỉnh quyền truy cậpGetter và setterẨn thông tinRút gọn hàm khởi tạo (8.0)Ôn tập: hệ thống hồ sơ học sinh2Không gian tên và tự động nạp
Giới thiệu về không gian tênTừ khóa useChuẩn tự động nạp PSR-4Trình tự động nạp của ComposerÔn tập: dự án có tổ chức5Giao diện và hợp đồng
Giới thiệu về giao diệnTriển khai giao diệnTriển khai nhiều giao diệnGiao diện và lớp trừu tượngGợi ý kiểu với giao diệnÔn tập: Máy tính hình học8Phương thức ma thuật
Giới thiệu về phương thức ma thuật__toString và __debugInfo__get, __set, __isset, __unset__call và __callStatic__clone và sao chép đối tượng__serialize và __unserializeÔn tập: Bộ sưu tập tùy chỉnh3Thuộc tính của lớp
Thuộc tính instance và staticHằng số trong lớpPhương thức và thuộc tính staticThuộc tính private và protectedThuộc tính chỉ đọc (PHP 8.1)Ôn tập: Trình quản lý tài khoản ngân hàng6Đa hình
Xem lại việc ghi đè phương thứcĐa hình qua giao diệnGợi ý kiểu và kiểu hợpLiên kết tĩnh muộnÔn tập: bộ xử lý thanh toánTự luyện tập: Trình biên dịch PHP online