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 и name

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

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

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

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

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

?>

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