Menu
Coddy logo textTech

Классы Book и User

Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy — урок 83 из 91.

challenge icon

Задание

Легко

Давайте заложим основу нашей системы управления библиотекой, создав классы Book и User. Эти основные объекты предметной области будут работать вместе для управления библиотечными операциями.

Вы распределите свой код по трем файлам:

  • Book.php — Создайте класс Book, который отслеживает библиотечные книги. Ваша книга должна иметь три свойства только для чтения (readonly), заданные через продвижение параметров конструктора (constructor promotion): isbn, title и author. Включите приватное свойство $isAvailable, которое изначально равно true. Добавьте три метода:
    • isAvailable(): bool — возвращает статус доступности
    • markAsBorrowed(): void — устанавливает доступность в false
    • markAsReturned(): void — устанавливает доступность в true
  • User.php — Подключите файл Book и создайте класс User, представляющий членов библиотеки. Ваш пользователь должен иметь два свойства только для чтения через продвижение конструктора: id (int) и name (string). Включите приватный массив $borrowedBooks (изначально пустой) и константу MAX_BOOKS, равную 3. Добавьте следующие методы:
    • getBorrowedBooks(): array — возвращает массив взятых книг
    • canBorrow(): bool — возвращает true, если у пользователя меньше MAX_BOOKS взятых книг
    • addBook(Book $book): void — добавляет книгу в массив взятых
    • removeBook(string $isbn): void — удаляет книгу по ISBN, используя array_filter
  • 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: Создать объект User с предоставленным id и именем

// TODO: Создать объект Book с предоставленным isbn, названием и автором

// TODO: Вывести, может ли пользователь изначально брать книги
// Формат: "Can borrow: yes" или "Can borrow: no"

// TODO: Пусть пользователь возьмет книгу:
// - Отметить книгу как выданную
// - Добавить книгу в список взятых книг пользователя

// TODO: Вывести доступность книги
// Формат: "Book available: yes" или "Book available: no"

// TODO: Вывести количество взятых книг
// Формат: "Books borrowed: [count]"

?>

Все уроки раздела Объектно-ориентированное программирование