Система выдачи книг
Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy. Урок 84 из 91.
Задание
ЛегкоДавайте воплотим нашу Library Management System в жизнь, создав класс Library, который координирует все операции заимствования. Этот центральный координатор будет управлять коллекцией книг и обеспечивать соблюдение правил, благодаря которым наша библиотека работает слаженно.
Вы организуете код в четырёх файлах:
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, который управляет коллекцией книг. В вашей библиотеке должны быть:- Приватный массив
$booksдля хранения книг, индексированных по ISBN addBook(Book $book): void: добавляет книгу в коллекциюfindBook(string $isbn): ?Book: возвращает книгу или null, если она не найденаborrowBook(User $user, string $isbn): string: проверяет условия и обрабатывает заимствование, возвращая соответствующие сообщенияreturnBook(User $user, string $isbn): string: обрабатывает возврат и обновляет состояние книги и пользователя
Метод
borrowBookдолжен последовательно проверить три условия и вернуть следующие точные сообщения:"Book not found": если книга не существует"Book is not available": если книга уже выдана"Borrowing limit reached": если у пользователя есть 3 книги"Successfully borrowed: [title]": при успешном выполнении
Метод
returnBookдолжен вернуть"Book not found", если книга не существует, или"Successfully returned: [title]"при успешном выполнении.- Приватный массив
main.php: подключите файл Library. Вы получите два входных значения: ISBN и название книги.Создайте
Library,Userс ID1и именем"Alice", а такжеBookс предоставленными ISBN, названием и автором"Unknown". Добавьте книгу в библиотеку, затем выполните следующие операции и выведите каждый результат на новой строке:- Взять книгу
- Попробовать взять ту же книгу ещё раз
- Вернуть книгу
- Взять книгу ещё раз
Это задание демонстрирует, как класс Library централизует бизнес-логику. Он проверяет условия, координирует изменения состояния объектов Book и User и возвращает понятную информацию о каждой операции.
Попробуйте сами
<?php
require_once 'Library.php';
// Прочитать ввод
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));
// TODO: Создать экземпляр Library
// TODO: Создать User с ID 1 и именем "Alice"
// TODO: Создать Book с предоставленными ISBN, title и автором "Unknown"
// TODO: Добавить книгу в library
// TODO: Выполнить эти операции и вывести каждый результат на новой строке:
// 1. Взять книгу
// 2. Попытаться взять ту же книгу снова
// 3. Вернуть книгу
// 4. Взять книгу ещё раз
?>Все уроки раздела Объектно-ориентированное программирование
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