Hệ thống mượn sách
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 84 trên 91.
Thử thách
DễHãy đưa Hệ thống quản lý thư viện vào hoạt động bằng cách tạo lớp Library để điều phối mọi thao tác mượn sách. Bộ phận điều phối trung tâm này sẽ quản lý bộ sưu tập sách và thực thi các quy tắc giúp thư viện hoạt động trơn tru.
Bạn sẽ sắp xếp code trong bốn tệp:
Book.php: LớpBooktừ bài học trước, có các thuộc tính chỉ đọc (isbn,title,author), thuộc tính riêng tư$isAvailablecó 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ảng riêng tư$borrowedBooks, hằng sốMAX_BOOKScó giá trị3và các phương thức:getBorrowedBooks(),canBorrow(),addBook(Book $book)vàremoveBook(string $isbn).Library.php: Bao gồm tệp User. Tạo lớpLibraryđể quản lý bộ sưu tập sách. Thư viện của bạn cần có:- Mảng riêng tư
$booksđể lưu sách, được lập chỉ mục theo ISBN addBook(Book $book): void: thêm sách vào bộ sưu tậpfindBook(string $isbn): ?Book: trả về sách hoặc null nếu không tìm thấyborrowBook(User $user, string $isbn): string: xác thực và xử lý việc mượn sách, rồi trả về thông báo phù hợpreturnBook(User $user, string $isbn): string: xử lý việc trả sách và cập nhật trạng thái của cả sách lẫn người dùng
Phương thức
borrowBookcần kiểm tra lần lượt ba điều kiện và trả về chính xác các thông báo sau:"Book not found": nếu sách không tồn tại"Book is not available": nếu sách đã được mượn"Borrowing limit reached": nếu người dùng đã mượn 3 quyển sách"Successfully borrowed: [title]": nếu thành công
Phương thức
returnBookcần trả về"Book not found"nếu sách không tồn tại, hoặc"Successfully returned: [title]"nếu thành công.- Mảng riêng tư
main.php: Bao gồm tệp Library. Bạn sẽ nhận hai đầu vào: một ISBN và tên sách.Tạo một
Library, mộtUsercó ID1và tên"Alice", cùng mộtBookcó ISBN, tên sách được cung cấp và tác giả"Unknown". Thêm sách vào thư viện, sau đó thực hiện các thao tác sau và in từng kết quả trên một dòng mới:- Mượn sách
- Thử mượn lại chính quyển sách đó
- Trả sách
- Mượn sách thêm một lần nữa
Thử thách này minh họa cách lớp Library tập trung hóa logic nghiệp vụ. Lớp này xác thực các điều kiện, điều phối những thay đổi trạng thái giữa các đối tượng Book và User, đồng thời trả về phản hồi dễ hiểu cho từng thao tác.
Tự làm thử
<?php
require_once 'Library.php';
// Đọc đầu vào
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));
// TODO: Tạo một instance của Library
// TODO: Tạo một User có ID 1 và tên "Alice"
// TODO: Tạo một Book với ISBN, tiêu đề đã cho và tác giả "Unknown"
// TODO: Thêm sách vào thư viện
// 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. Mượn sách
// 2. Thử mượn lại cuốn sách đó
// 3. Trả sách
// 4. Mượn sách thêm một lần nữa
?>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