Giao diện quản trị
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 86 trên 91.
Thử thách
DễHãy mở rộng Hệ thống quản lý thư viện bằng cách bổ sung các quyền quản trị. Bạn sẽ tạo một lớp Admin kế thừa từ User, nhưng có quyền đặc biệt để quản lý kho sách của thư viện: thêm sách mới và xóa sách hiện có.
Bạn sẽ sắp xếp code trong năm tệp:
Book.php: LớpBookcó các thuộc tính chỉ đọc (isbn,title,author), một thuộc tính$isAvailableriêng tư có giá trị ban đầu làtrue, cùng các phương thức:isAvailable(),markAsBorrowed()vàmarkAsReturned().User.php: Bao gồm tệp Book. LớpUsercó các thuộc tính chỉ đọc (id,name), một mảng$borrowedBooksriêng tư, hằng sốMAX_BOOKScó giá trị3, cùng các phương thức:getBorrowedBooks(),canBorrow(),addBook(Book $book)vàremoveBook(string $isbn).Library.php: Bao gồm tệp User. LớpLibrarycó các chức năng hiện có, bao gồmaddBook(),findBook(),borrowBook(),returnBook()và các phương thức tìm kiếm. Thêm một phương thức mới:removeBook(string $isbn): void: xóa sách khỏi bộ sưu tập bằngunset()
Admin.php: Bao gồm tệp Library. Tạo lớpAdminkế thừa từUser. Admin kế thừa mọi khả năng của user và có thêm hai phương thức quản trị:addBookToLibrary(Library $library, Book $book): string: thêm sách vào thư viện và trả về"Added: [title]"removeBookFromLibrary(Library $library, string $isbn): string: thử xóa sách và thực hiện các bước kiểm tra sau:- Nếu sách không tồn tại, trả về
"Book not found" - Nếu sách đang được mượn, trả về
"Cannot remove: book is currently borrowed" - Nếu không, xóa sách và trả về
"Removed: [title]"
- Nếu sách không tồn tại, trả về
main.php: Bao gồm tệp Admin. Bạn sẽ nhận hai đầu vào: ISBN và tên sách.Tạo một
Libraryvà mộtAdmincó ID1và tên"AdminUser". Đồng thời, tạo mộtUserthông thường có ID2và tên"RegularUser".Tạo một
Bookvới ISBN, tên sách được cung cấp và tác giả"Test Author". Thực hiện các thao tác sau và in kết quả của từng thao tác trên một dòng mới:- Cho admin thêm sách vào thư viện
- Cho user thông thường mượn sách
- Cho admin thử xóa sách, thao tác này sẽ thất bại vì sách đang được mượn
- Cho user thông thường trả sách
- Cho admin xóa sách, lần này thao tác sẽ thành công
- Cho admin thử xóa lại chính cuốn sách đó, thao tác này sẽ thất bại vì không tìm thấy sách
Thử thách này cho thấy kế thừa tạo nên một hệ thống phân cấp tự nhiên: admin là user có thêm quyền. Các bước kiểm tra trong removeBookFromLibrary đảm bảo tính toàn vẹn của dữ liệu bằng cách ngăn việc xóa những cuốn sách vẫn đang được lưu hành.
Tự làm thử
<?php
require_once 'Admin.php';
// Đọc đầu vào
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));
// TODO: Tạo một Library
// TODO: Tạo một Admin có ID 1 và tên "AdminUser"
// TODO: Tạo một User thông thường có ID 2 và tên "RegularUser"
// TODO: Tạo một Book với ISBN, tiêu đề đã cho và tác giả "Test Author"
// TODO: Thực hiện các thao tác sau và in mỗi kết quả trên một dòng mới:
// 1. Cho admin thêm sách vào thư viện
// 2. Cho người dùng thông thường mượn sách
// 3. Cho admin thử xóa sách (thao tác sẽ thất bại vì sách đang được mượn)
// 4. Cho người dùng thông thường trả sách
// 5. Cho admin xóa sách (lúc này thao tác sẽ thành công)
// 6. Cho admin thử xóa lại cuốn sách đó (thao tác sẽ thất bại vì không tìm thấy sách)
?>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ỉnh11Hệ thống kiểu dữ liệu và xử lý lỗi
Khai báo kiểu dữ liệuKiểu dữ liệu có thể nhận giá trị nullKiểu hợp và kiểu giaoCác lớp ngoại lệHệ thống phân cấp ngoại lệ tùy chỉnhTry, Catch, FinallyÔn tập: Trình xác thực biểu mẫu14Dự án: Quản lý thư viện
Tổng quan dự ánLớp sách và người dùng3Thuộ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