Интерфейс администратора
Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy. Урок 86 из 91.
Задание
ЛегкоДавайте расширим нашу систему управления библиотекой, добавив административные возможности. Вы создадите класс 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]"
- Если книга doesn't exist, верните
main.php: подключите файл Admin. Вы получите два входных значения: ISBN и название книги.Создайте
LibraryиAdminс ID1и именем"AdminUser". Также создайте обычногоUserс ID2и именем"RegularUser".Создайте
Bookс указанными ISBN, названием и автором"Test Author". Выполните следующие операции и выведите каждый результат с новой строки:- Have admin добавить книгу в библиотеку
- Have обычный пользователь borrow книгу
- Have admin попытаться удалить книгу (должно произойти fail: она borrowed)
- Have обычный пользователь вернуть книгу
- Have admin удалить книгу (теперь операция должна пройти успешно)
- 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 попытается удалить ту же книгу снова (должно завершиться неудачей - не найдена)
?>Все уроки раздела Объектно-ориентированное программирование
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыКлючевое слово $thisМетодыСвойстваКонструктор (__construct)Деструктор (__destruct)Повторение — простой калькулятор4Наследование
Основы наследованияКлючевое слово parent::Переопределение методовКлючевое слово finalАбстрактные классыПовторение — иерархия сотрудников7Инкапсуляция
Public, Protected, PrivateМодификаторы доступа подробноГеттеры и сеттерыСокрытие информацииПродвижение конструктора (8.0)Повторение — система учёта студентов2Пространства имён и автозагрузка
Введение в пространства имёнКлючевое слово useСтандарт автозагрузки PSR-4Автозагрузчик ComposerПовторение — структурированный проект5Интерфейсы и контракты
Введение в интерфейсыРеализация интерфейсовРеализация нескольких интерфейсовИнтерфейс и абстрактный классАннотация типов с интерфейсамиПовторение — калькулятор фигур8Магические методы
Введение в магические методы__toString и __debugInfo__get, __set, __isset, __unset__call и __callStatic__clone и клонирование объектов__serialize и __unserializeПовторение — пользовательская коллекция11Система типов и обработка ошибок
Объявления типовNullable-типыОбъединение и пересечение типовКлассы исключенийПользовательская иерархия исключенийTry, Catch, FinallyПовторение — валидатор формы14Проект: управление библиотекой
Обзор проектаКлассы книг и пользователей3Свойства классов
Свойства экземпляра и статические свойстваКонстанты в классахСтатические методы и свойстваПриватные и защищённые свойстваСвойства только для чтения (PHP 8.1)Повторение — менеджер банковского счёта6Полиморфизм
Повторение переопределения методовПолиморфизм через интерфейсыАннотации типов и объединённые типыПозднее статическое связываниеПовторение — обработчик платежей9Трейты
Введение в трейтыИспользование нескольких трейтовРазрешение конфликтов трейтовАбстрактные методы в трейтахТрейты и наследование12Паттерны проектирования, часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн StrategyПотренируйтесь самостоятельно: Онлайн-компилятор PHP