System wypożyczania
Część sekcji Programowanie obiektowe ścieżki PHP w Coddy. Lekcja 84 z 91.
Wyzwanie
ŁatwyTchnijmy życie w nasz System zarządzania biblioteką, tworząc klasę Library, która koordynuje wszystkie operacje wypożyczania. Ten centralny koordynator będzie zarządzać kolekcją książek i egzekwować zasady, dzięki którym nasza biblioteka działa sprawnie.
Rozmieścisz swój kod w czterech plikach:
Book.php: Twoja klasaBookz poprzedniej lekcji, z właściwościami tylko do odczytu (isbn,title,author), prywatną właściwością$isAvailable, której początkową wartością jesttrue, oraz metodami:isAvailable(),markAsBorrowed()imarkAsReturned().User.php: Dołącz plik Book. Twoja klasaUserz właściwościami tylko do odczytu (id,name), prywatną tablicą$borrowedBooks, stałąMAX_BOOKSo wartości3oraz metodami:getBorrowedBooks(),canBorrow(),addBook(Book $book)iremoveBook(string $isbn).Library.php: Dołącz plik User. Utwórz klasęLibrary, która zarządza kolekcją książek. Twoja biblioteka powinna mieć:- Prywatną tablicę
$booksdo przechowywania książek indeksowanych według ISBN addBook(Book $book): void: dodaje książkę do kolekcjifindBook(string $isbn): ?Book: zwraca książkę lub null, jeśli jej nie znalezionoborrowBook(User $user, string $isbn): string: sprawdza warunki i przetwarza wypożyczenie, zwracając odpowiednie komunikatyreturnBook(User $user, string $isbn): string: przetwarza zwroty i aktualizuje stan zarówno książki, jak i użytkownika
Metoda
borrowBookpowinna sprawdzać po kolei trzy warunki i zwracać dokładnie te komunikaty:"Book not found": jeśli książka nie istnieje"Book is not available": jeśli została już wypożyczona"Borrowing limit reached": jeśli użytkownik ma 3 książki"Successfully borrowed: [title]": w przypadku powodzenia
Metoda
returnBookpowinna zwracać"Book not found", jeśli książka nie istnieje, albo"Successfully returned: [title]"w przypadku powodzenia.- Prywatną tablicę
main.php: Dołącz plik Library. Otrzymasz dwa dane wejściowe: ISBN i tytuł książki.Utwórz obiekt
Library, obiektUsero identyfikatorze1i nazwie"Alice"oraz obiektBookz podanym ISBN-em, tytułem i autorem"Unknown". Dodaj książkę do biblioteki, a następnie wykonaj te operacje i wypisz każdy wynik w nowej linii:- Wypożycz książkę
- Spróbuj ponownie wypożyczyć tę samą książkę
- Zwróć książkę
- Wypożycz książkę jeszcze raz
To wyzwanie pokazuje, jak klasa Library centralizuje logikę biznesową. Sprawdza warunki, koordynuje zmiany stanu w obiektach Book i User oraz zwraca zrozumiałe informacje zwrotne dla każdej operacji.
Spróbuj swoich sił
<?php
require_once 'Library.php';
// Odczytaj dane wejściowe
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));
// TODO: Utwórz instancję Library
// TODO: Utwórz obiekt User o ID 1 i nazwie "Alice"
// TODO: Utwórz obiekt Book z podanym ISBN, tytułem i autorem "Unknown"
// TODO: Dodaj książkę do biblioteki
// TODO: Wykonaj te operacje i wypisz każdy wynik w nowej linii:
// 1. Wypożycz książkę
// 2. Spróbuj ponownie wypożyczyć tę samą książkę
// 3. Zwróć książkę
// 4. Wypożycz książkę jeszcze raz
?>Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrzneWprowadzenie do programowania obiektowegoKlasy a obiektySłowo kluczowe $thisMetodyWłaściwościKonstruktor (__construct)Destruktor (__destruct)Powtórka — prosty kalkulator4Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe parent::Przesłanianie metodSłowo kluczowe finalKlasy abstrakcyjnePowtórzenie – hierarchia pracowników7Enkapsulacja
Public, protected, privateModyfikatory dostępu w szczegółachGettery i setteryUkrywanie informacjiPromocja parametrów konstruktora (8.0)Podsumowanie — system ewidencji studentów2Przestrzenie nazw i autoloading
Wprowadzenie do przestrzeni nazwSłowo kluczowe useStandard autoloadingu PSR-4Autoloader ComposeraPodsumowanie – uporządkowany projekt5Interfejsy i kontrakty
Wprowadzenie do interfejsówImplementowanie interfejsówImplementowanie wielu interfejsówInterfejs a klasa abstrakcyjnaPodpowiadanie typów za pomocą interfejsówPodsumowanie — kalkulator kształtów8Metody magiczne
Wprowadzenie do metod magicznych__toString i __debugInfo__get, __set, __isset, __unset__call i __callStatic__clone i klonowanie obiektów__serialize i __unserializePodsumowanie — własna kolekcja11System typów i obsługa błędów
Deklaracje typówTypy nullableTypy sumy i przecięciaKlasy wyjątkówNiestandardowa hierarchia wyjątkówTry, Catch, FinallyPodsumowanie — walidator formularzy14Projekt: Zarządzanie biblioteką
Przegląd projektuKlasy książki i użytkownika3Właściwości klas
Właściwości instancji a właściwości statyczneStałe w klasachMetody i właściwości statyczneWłaściwości prywatne i chronioneWłaściwości tylko do odczytu (PHP 8.1)Podsumowanie — menedżer kont bankowych6Polimorfizm
Ponowne omówienie nadpisywania metodPolimorfizm za pomocą interfejsówPodpowiedzi typów i typy sumyPóźne wiązanie statycznePodsumowanie — procesor płatności9Cechy
Wprowadzenie do cechKorzystanie z wielu cechRozwiązywanie konfliktów cechMetody abstrakcyjne w cechachCechy a dziedziczenie12Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec StrategyPoćwicz samodzielnie: Kompilator PHP online