Klasy książki i użytkownika
Część sekcji Programowanie obiektowe ścieżki PHP w Coddy. Lekcja 83 z 91.
Wyzwanie
ŁatwyZbudujmy podstawy naszego systemu zarządzania biblioteką, tworząc klasy Book i User. Te kluczowe obiekty domenowe będą współpracować przy zarządzaniu operacjami biblioteki.
Rozmieścisz kod w trzech plikach:
Book.php: Utwórz klasęBook, która śledzi książki w bibliotece. Twoja książka powinna mieć trzy właściwości tylko do odczytu ustawiane przez promocję konstruktora:isbn,titleiauthor. Dodaj prywatną właściwość$isAvailable, której początkową wartością jesttrue. Dodaj trzy metody:isAvailable(): bool: zwraca status dostępnościmarkAsBorrowed(): void: ustawia dostępność na falsemarkAsReturned(): void: ustawia dostępność na true
User.php: Dołącz plik Book i utwórz klasęUserreprezentującą członków biblioteki. Twój użytkownik powinien mieć dwie właściwości tylko do odczytu ustawiane przez promocję konstruktora:id(int) iname(string). Dodaj prywatną tablicę$borrowedBooks(początkowo pustą) oraz stałąMAX_BOOKSustawioną na3. Dodaj następujące metody:getBorrowedBooks(): array: zwraca tablicę wypożyczonych książekcanBorrow(): bool: zwraca true, jeśli użytkownik wypożyczył mniej niż MAX_BOOKSaddBook(Book $book): void: dodaje książkę do tablicy wypożyczonych książekremoveBook(string $isbn): void: usuwa książkę na podstawie numeru ISBN przy użyciuarray_filter
main.php: Dołącz plik User i ożyw swoje klasy. Otrzymasz cztery dane wejściowe: identyfikator użytkownika, imię użytkownika, numer ISBN książki i jej tytuł (autorem będzie"Unknown").Utwórz obiekt
Useri obiektBookz podanymi wartościami. Wypisz, czy użytkownik może początkowo wypożyczyć książkę, a następnie wypożycz ją użytkownikowi (oznacz ją jako wypożyczoną i dodaj do użytkownika). Na koniec wypisz dostępność książki oraz liczbę wypożyczonych książek.Format wyjściowy:
Can borrow: [yes/no] Book available: [yes/no] Books borrowed: [count]
Zwróć uwagę, jak enkapsulacja chroni stan wewnętrzny: dostępność książki zmienia się wyłącznie za pomocą dedykowanych metod, a wypożyczonymi książkami użytkownika zarządza się poprzez kontrolowany dostęp. Te podstawy posłużą do zbudowania systemu wypożyczania, który omówimy w następnej lekcji.
Spróbuj swoich sił
<?php
require_once 'User.php';
// Odczytaj dane wejściowe
$userId = intval(trim(fgets(STDIN)));
$userName = trim(fgets(STDIN));
$bookIsbn = trim(fgets(STDIN));
$bookTitle = trim(fgets(STDIN));
$bookAuthor = "Unknown";
// TODO: Utwórz obiekt User z podanymi id i nazwą
// TODO: Utwórz obiekt Book z podanymi isbn, tytułem i autorem
// TODO: Wyświetl, czy użytkownik może początkowo wypożyczyć książkę
// Format: "Can borrow: yes" lub "Can borrow: no"
// TODO: Spraw, aby użytkownik wypożyczył książkę:
// - Oznacz książkę jako wypożyczoną
// - Dodaj książkę do listy książek wypożyczonych przez użytkownika
// TODO: Wyświetl dostępność książki
// Format: "Book available: yes" lub "Book available: no"
// TODO: Wyświetl liczbę wypożyczonych książek
// Format: "Books borrowed: [count]"
?>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