Menu
Coddy logo textTech

Классы книг и пользователей

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

challenge icon

Задание

Легко

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

Вы организуете код в трёх файлах:

  • Book.php: создайте класс Book, который отслеживает книги библиотеки. У вашей книги должны быть три свойства readonly, заданные с помощью продвижения параметров конструктора: isbn, title и author. Добавьте приватное свойство $isAvailable, начальное значение которого — true. Добавьте три метода:
    • isAvailable(): bool: возвращает статус доступности
    • markAsBorrowed(): void: устанавливает доступность в значение false
    • markAsReturned(): void: устанавливает доступность в значение true
  • User.php: подключите файл Book и создайте класс User, представляющий читателей библиотеки. У вашего пользователя должны быть два свойства readonly, заданные с помощью продвижения параметров конструктора: 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: Вывести, может ли пользователь взять книгу изначально
// Format: "Can borrow: yes" or "Can borrow: no"

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

// TODO: Вывести доступность книги
// Format: "Book available: yes" or "Book available: no"

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

?>

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

Потренируйтесь самостоятельно: Онлайн-компилятор PHP