Menu
Coddy logo textTech

Интерфейс администратора

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

challenge icon

Задание

Легко

Давайте расширим нашу систему управления библиотекой, добавив административные возможности. Вы создадите класс Admin, который наследуется от User, но обладает специальными полномочиями для управления инвентарем библиотеки — добавлением новых книг и удалением существующих.

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

  • Book.php — Ваш класс Book со свойствами только для чтения (isbn, title, author), приватным свойством $isAvailable, которое изначально равно true, и методами: isAvailable(), markAsBorrowed() и markAsReturned().
  • User.php — Подключите файл Book. Ваш класс User со свойствами только для чтения (id, name), приватным массивом $borrowedBooks, константой MAX_BOOKS со значением 3 и методами: getBorrowedBooks(), canBorrow(), addBook(Book $book) и removeBook(string $isbn).
  • Library.php — Подключите файл User. Ваш класс Library с существующим функционалом, включая addBook(), findBook(), borrowBook(), returnBook() и методы поиска. Добавьте новый метод:
    • removeBook(string $isbn): void — удаляет книгу из коллекции с помощью unset()
  • Admin.php — Подключите файл Library. Создайте класс Admin, который расширяет User. Администраторы наследуют все возможности пользователей, но получают два административных метода:
    • addBookToLibrary(Library $library, Book $book): string — добавляет книгу в библиотеку и возвращает "Added: [title]"
    • removeBookFromLibrary(Library $library, string $isbn): string — пытается удалить книгу со следующими проверками:
      • Если книга не найдена, вернуть "Book not found"
      • Если книга в данный момент выдана, вернуть "Cannot remove: book is currently borrowed"
      • В противном случае удалить её и вернуть "Removed: [title]"
  • main.php — Подключите файл Admin. Вы получите два входных значения: ISBN и название книги.

    Создайте Library и Admin с ID 1 и именем "AdminUser". Также создайте обычного User с ID 2 и именем "RegularUser".

    Создайте Book с предоставленным ISBN, названием и автором "Test Author". Выполните следующие операции и выведите каждый результат на новой строке:

    1. Пусть администратор добавит книгу в библиотеку
    2. Пусть обычный пользователь возьмет книгу
    3. Пусть администратор попытается удалить книгу (должно не получиться — она выдана)
    4. Пусть обычный пользователь вернет книгу
    5. Пусть администратор удалит книгу (теперь должно получиться)
    6. Пусть администратор попытается удалить ту же книгу еще раз (должно не получиться — не найдена)

Эта задача демонстрирует, как наследование создает естественную иерархию — администраторы являются пользователями с дополнительными привилегиями. Проверки безопасности в removeBookFromLibrary обеспечивают целостность данных, предотвращая удаление книг, которые все еще находятся в обращении.

Попробуйте сами

<?php
require_once 'Admin.php';

// Чтение входных данных
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));

// TODO: Создать библиотеку (Library)

// TODO: Создать администратора (Admin) с ID 1 и именем "AdminUser"

// TODO: Создать обычного пользователя (User) с ID 2 и именем "RegularUser"

// TODO: Создать книгу (Book) с предоставленным ISBN, названием и автором "Test Author"

// TODO: Выполнить эти операции и вывести каждый результат на новой строке:
// 1. Пусть администратор добавит книгу в библиотеку
// 2. Пусть обычный пользователь возьмет книгу
// 3. Пусть администратор попытается удалить книгу (должно не удаться — она выдана)
// 4. Пусть обычный пользователь вернет книгу
// 5. Пусть администратор удалит книгу (теперь должно удаться)
// 6. Пусть администратор попытается удалить ту же книгу снова (должно не удаться — не найдена)

?>

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