Menu
CoddyTech

图书和用户类

本课属于 Coddy PHP 学习旅程的“面向对象编程”单元。第 83 课,共 91 课。

challenge icon

挑战

简单

我们来创建 Book 和 User 类,为图书管理系统打好基础。这些核心领域对象将协同管理图书馆的各项操作。

你需要把代码分成三个文件:

  • Book.php:创建一个用于管理图书馆藏书的 Book 类。图书应有三个通过构造函数属性提升设置的只读属性:isbn、title 和 author。添加一个私有的 $isAvailable 属性,初始值为 true。再添加三个方法:
    • isAvailable(): bool:返回图书的可借阅状态
    • markAsBorrowed(): void:将可借阅状态设为 false
    • markAsReturned(): void:将可借阅状态设为 true
  • User.php:引入 Book 文件,并创建一个表示图书馆会员的 User 类。用户应有两个通过构造函数属性提升设置的只读属性:id(int)和 name(string)。添加一个私有数组 $borrowedBooks(初始为空),以及一个值为 3 的常量 MAX_BOOKS。再添加以下方法:
    • getBorrowedBooks(): array:返回借阅图书数组
    • canBorrow(): bool:如果用户借阅的图书少于 MAX_BOOKS,就返回 true
    • addBook(Book $book): void:将一本书添加到借阅数组中
    • removeBook(string $isbn): void:使用 array_filter 根据 ISBN 移除一本书
  • main.php:引入 User 文件,让这些类运行起来。你会收到四个输入:用户 ID、用户名、图书 ISBN 和图书标题(作者为 "Unknown")。

    使用给定的值创建一个 User 和一个 Book。打印用户最初是否可以借书,然后让用户借阅这本书(将其标记为已借出,并添加到用户的借阅列表中)。最后,打印图书的可借阅状态和借阅图书的数量。

    输出格式:

    Can borrow: [yes/no]
    Book available: [yes/no]
    Books borrowed: [count]

注意封装如何保护内部状态:图书的可借阅状态只能通过专用方法修改,用户的借阅图书也只能通过受控的方式管理。这个基础将支持我们接下来要构建的借阅系统。

亲手试试

<?php

require_once 'User.php';

// 读取输入
$userId = intval(trim(fgets(STDIN)));
$userName = trim(fgets(STDIN));
$bookIsbn = trim(fgets(STDIN));
$bookTitle = trim(fgets(STDIN));
$bookAuthor = "Unknown";

// TODO:使用提供的 id 和 name 创建一个 User 对象

// TODO:使用提供的 isbn、title 和 author 创建一个 Book 对象

// TODO:输出用户最初是否可以借书
// 格式:"Can borrow: yes" 或 "Can borrow: no"

// TODO:让用户借阅这本书:
// 将这本书标记为已借出
// 将这本书添加到用户已借阅的书籍中

// TODO:输出这本书是否可借
// 格式:"Book available: yes" 或 "Book available: no"

// TODO:输出已借阅书籍的数量
// 格式:"Books borrowed: [count]"

?>

面向对象编程中的所有课

自己练习: PHP 在线编译器