Lớp sách và người dùng
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 83 trên 91.
Thử thách
DễHãy xây dựng nền tảng cho Hệ thống quản lý thư viện bằng cách tạo các lớp Book và User. Các đối tượng cốt lõi trong miền này sẽ phối hợp với nhau để quản lý hoạt động của thư viện.
Bạn sẽ sắp xếp code trong ba tệp:
Book.php: Tạo lớpBookđể theo dõi sách trong thư viện. Lớp này cần có ba thuộc tính chỉ đọc được thiết lập thông qua cú pháp nâng cấp hàm khởi tạo:isbn,titlevàauthor. Thêm thuộc tính riêng tư$isAvailable, ban đầu có giá trịtrue. Thêm ba phương thức:isAvailable(): bool: trả về trạng thái còn sách hay khôngmarkAsBorrowed(): void: đặt trạng thái còn sách thành falsemarkAsReturned(): void: đặt trạng thái còn sách thành true
User.php: Thêm tệp Book và tạo lớpUserđại diện cho thành viên thư viện. Lớp này cần có hai thuộc tính chỉ đọc được thiết lập thông qua cú pháp nâng cấp hàm khởi tạo:id(int) vàname(string). Thêm mảng riêng tư$borrowedBooks(ban đầu rỗng) và hằng sốMAX_BOOKScó giá trị3. Thêm các phương thức sau:getBorrowedBooks(): array: trả về mảng sách đã mượncanBorrow(): bool: trả về true nếu người dùng đang mượn ít hơn MAX_BOOKS cuốn sáchaddBook(Book $book): void: thêm một cuốn sách vào mảng sách đã mượnremoveBook(string $isbn): void: xóa sách theo ISBN bằngarray_filter
main.php: Thêm tệp User và đưa các lớp vào hoạt động. Bạn sẽ nhận bốn giá trị đầu vào: ID người dùng, tên người dùng, ISBN của sách và tên sách (tác giả sẽ là"Unknown").Tạo một đối tượng
Uservà một đối tượngBookbằng các giá trị đã cho. In ra thông tin người dùng có thể mượn sách lúc đầu hay không, sau đó cho người dùng mượn sách (đánh dấu sách đã được mượn và thêm sách vào danh sách của người dùng). Cuối cùng, in ra tình trạng còn sách và số lượng sách đã mượn.Định dạng đầu ra:
Can borrow: [yes/no] Book available: [yes/no] Books borrowed: [count]
Hãy chú ý cách tính đóng gói bảo vệ trạng thái nội bộ: tình trạng còn sách chỉ thay đổi thông qua các phương thức chuyên biệt, còn sách người dùng đã mượn được quản lý bằng cách truy cập có kiểm soát. Nền tảng này sẽ hỗ trợ hệ thống mượn sách mà chúng ta sẽ xây dựng tiếp theo.
Tự làm thử
<?php
require_once 'User.php';
// Đọc dữ liệu đầu vào
$userId = intval(trim(fgets(STDIN)));
$userName = trim(fgets(STDIN));
$bookIsbn = trim(fgets(STDIN));
$bookTitle = trim(fgets(STDIN));
$bookAuthor = "Unknown";
// TODO: Tạo đối tượng User với id và tên đã cho
// TODO: Tạo đối tượng Book với isbn, tiêu đề và tác giả đã cho
// TODO: In ra trạng thái mượn sách ban đầu của người dùng
// Định dạng: "Can borrow: yes" hoặc "Can borrow: no"
// TODO: Cho người dùng mượn sách:
// - Đánh dấu sách đã được mượn
// - Thêm sách vào danh sách sách người dùng đã mượn
// TODO: In ra trạng thái sẵn có của sách
// Định dạng: "Book available: yes" hoặc "Book available: no"
// TODO: In ra số sách đã mượn
// Định dạng: "Books borrowed: [count]"
?>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