Testowanie i integracja
Część sekcji Programowanie obiektowe ścieżki PHP w Coddy. Lekcja 87 z 91.
Wyzwanie
ŁatwyGratulacje z okazji zbudowania kompletnego systemu zarządzania biblioteką! Teraz pora połączyć wszystkie komponenty i sprawdzić, czy wszystko działa bez zakłóceń. Utworzysz kompleksowy test integracyjny, który sprawdzi pełny przepływ pracy w Twojej bibliotece.
Rozmieścisz kod w pięciu plikach:
Book.php: Twoja klasaBookz właściwościami tylko do odczytu (isbn,title,author), prywatną właściwością$isAvailablei metodami:isAvailable(),markAsBorrowed()orazmarkAsReturned().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 wszystkimi metodami użytkownika.Library.php: Dołącz plik User. Twoja klasaLibraryz funkcjami zarządzania książkami, wypożyczania i zwracania, metodami wyszukiwania oraz metodąremoveBook().Admin.php: Dołącz plik Library. Twoja klasaAdminrozszerzająca klasęUser, z metodamiaddBookToLibrary()iremoveBookFromLibrary().main.php: Dołącz plik Admin. Tutaj uruchomisz test integracyjny. Otrzymasz dwa wejścia: nazwę użytkownika i słowo kluczowe będące nazwiskiem autora do wyszukania.Skonfiguruj system biblioteczny:
- Utwórz obiekt
Library - Utwórz obiekt
Admino ID1i nazwie"LibraryAdmin" - Utwórz obiekt
Usero ID2i podanej nazwie użytkownika
Niech administrator doda te trzy książki:
- ISBN:
"978-0", tytuł:"PHP Fundamentals", autor:"Sarah Johnson" - ISBN:
"978-1", tytuł:"OOP Patterns", autor:"Mike Chen" - ISBN:
"978-2", tytuł:"Web Security", autor:"Sarah Johnson"
Następnie wykonaj poniższą sekwencję testu integracyjnego, wypisując każdy wynik w nowym wierszu:
- Niech użytkownik wypożyczy
"978-0" - Niech użytkownik wypożyczy
"978-1" - Wyszukaj książki według autora, używając drugiego wejścia, i wypisz ich liczbę:
"Books by author: [count]" - Pobierz dostępne książki i wypisz:
"Available: [count]" - Niech użytkownik zwróci
"978-0" - Ponownie pobierz dostępne książki i wypisz:
"Available after return: [count]" - Niech administrator usunie
"978-0" - Niech administrator spróbuje ponownie usunąć
"978-0"
- Utwórz obiekt
To końcowe wyzwanie sprawdza, czy cały system działa jako całość: administratorzy zarządzają zasobami, użytkownicy wypożyczają książki w ramach limitów, wyszukiwanie zwraca dokładne wyniki, a dostępność jest prawidłowo aktualizowana w całym przepływie pracy.
Spróbuj swoich sił
<?php
require_once 'Admin.php';
// Odczytaj dane wejściowe
$userName = trim(fgets(STDIN));
$searchAuthor = trim(fgets(STDIN));
// TODO: Utwórz obiekt Library
// TODO: Utwórz obiekt Admin z ID 1 i nazwą "LibraryAdmin"
// TODO: Utwórz obiekt User z ID 2 i podaną nazwą użytkownika
// TODO: Niech administrator doda trzy książki:
// - ISBN: "978-0", Tytuł: "PHP Fundamentals", Autor: "Sarah Johnson"
// - ISBN: "978-1", Tytuł: "OOP Patterns", Autor: "Mike Chen"
// - ISBN: "978-2", Tytuł: "Web Security", Autor: "Sarah Johnson"
// TODO: Sekwencja testu integracyjnego:
// 1. Niech użytkownik wypożyczy "978-0"
// 2. Niech użytkownik wypożyczy "978-1"
// 3. Wyszukaj według autora, używając $searchAuthor, i wypisz: "Books by author: [count]"
// 4. Pobierz dostępne książki i wyświetl: "Available: [count]"
// 5. Niech użytkownik zwróci "978-0"
// 6. Ponownie pobierz dostępne książki i wyświetl: "Available after return: [count]"
// 7. Niech administrator usunie "978-0"
// 8. Niech administrator spróbuje ponownie usunąć "978-0"
?>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