Menu
Coddy logo textTech

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

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

challenge icon

Задание

Легко

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

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

  • Book.php: ваш класс Book со свойствами readonly (isbn, title, author), приватным свойством $isAvailable, начинающимся со значения true, и методами: isAvailable(), markAsBorrowed() и markAsReturned().
  • User.php: подключите файл Book. Ваш класс User со свойствами readonly (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: удаляет книгу из collection с помощью unset()
  • Admin.php: подключите файл Library. Создайте класс Admin, который расширяет User. Admin наследуют все возможности пользователей, но получают два административных метода:
    • addBookToLibrary(Library $library, Book $book): string: добавляет книгу в библиотеку и возвращает "Added: [title]"
    • removeBookFromLibrary(Library $library, string $isbn): string: пытается удалить книгу со следующими проверками:
      • Если книга doesn't exist, верните "Book not found"
      • Если книга currently borrowed, верните "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. Have admin добавить книгу в библиотеку
    2. Have обычный пользователь borrow книгу
    3. Have admin попытаться удалить книгу (должно произойти fail: она borrowed)
    4. Have обычный пользователь вернуть книгу
    5. Have admin удалить книгу (теперь операция должна пройти успешно)
    6. Have admin снова попытаться удалить ту же книгу (должно произойти fail: книга не найдена)

Это challenge демонстрирует, как наследование создаёт естественную иерархию: Admin — это пользователи с дополнительными привилегиями. Проверки безопасности в 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, title и автором "Test Author"

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

?>

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

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