Menu
CoddyTech

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.

challenge icon

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ớp Book để 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, title và 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ông
    • markAsBorrowed(): void: đặt trạng thái còn sách thành false
    • markAsReturned(): void: đặt trạng thái còn sách thành true
  • User.php: Thêm tệp Book và tạo lớp User đạ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_BOOKS có giá trị 3. Thêm các phương thức sau:
    • getBorrowedBooks(): array: trả về mảng sách đã mượn
    • canBorrow(): bool: trả về true nếu người dùng đang mượn ít hơn MAX_BOOKS cuốn sách
    • addBook(Book $book): void: thêm một cuốn sách vào mảng sách đã mượn
    • removeBook(string $isbn): void: xóa sách theo ISBN bằng array_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 User và một đối tượng Book bằ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

Tự luyện tập: Trình biên dịch PHP online