Sistema di prestito
Fa parte della sezione Programmazione orientata agli oggetti del percorso PHP di Coddy. Lezione 84 di 91.
Sfida
FacileDiamo vita al nostro sistema di gestione della biblioteca creando la classe Library, che coordina tutte le operazioni di prestito. Questo coordinatore centrale gestirà la collezione di libri e farà rispettare le regole che consentono alla nostra biblioteca di funzionare senza intoppi.
Organizzerai il codice in quattro file:
Book.php: la tua classeBookdella lezione precedente, con proprietà readonly (isbn,title,author), una proprietà privata$isAvailableinizializzata atruee i metodi:isAvailable(),markAsBorrowed()emarkAsReturned().User.php: includi il file Book. La tua classeUseravrà proprietà readonly (id,name), un array privato$borrowedBooks, una costanteMAX_BOOKSimpostata a3e i metodi:getBorrowedBooks(),canBorrow(),addBook(Book $book)eremoveBook(string $isbn).Library.php: includi il file User. Crea una classeLibraryche gestisca la collezione di libri. La tua biblioteca dovrà avere:- Un array privato
$booksper memorizzare i libri indicizzati per ISBN addBook(Book $book): void: aggiunge un libro alla collezionefindBook(string $isbn): ?Book: restituisce il libro oppure null se non viene trovatoborrowBook(User $user, string $isbn): string: convalida ed elabora il prestito, restituendo i messaggi appropriatireturnBook(User $user, string $isbn): string: elabora le restituzioni e aggiorna lo stato sia del libro sia dell'utente
Il metodo
borrowBookdovrà controllare tre condizioni, nell'ordine indicato, e restituire questi messaggi esatti:"Book not found": se il libro non esiste"Book is not available": se è già stato preso in prestito"Borrowing limit reached": se l'utente ha 3 libri"Successfully borrowed: [title]": in caso di successo
Il metodo
returnBookdovrà restituire"Book not found"se il libro non esiste oppure"Successfully returned: [title]"in caso di successo.- Un array privato
main.php: includi il file Library. Riceverai due input: un ISBN e il titolo di un libro.Crea una
Library, unUsercon ID1e nome"Alice"e unBookcon l'ISBN, il titolo e l'autore forniti,"Unknown". Aggiungi il libro alla biblioteca, quindi esegui queste operazioni e stampa ogni risultato su una nuova riga:- Prendi in prestito il libro
- Prova a prendere di nuovo in prestito lo stesso libro
- Restituisci il libro
- Prendi in prestito il libro ancora una volta
Questa sfida mostra come la classe Library centralizzi la logica aziendale. Convalida le condizioni, coordina le modifiche di stato tra gli oggetti Book e User e restituisce un riscontro significativo per ogni operazione.
Provalo tu
<?php
require_once 'Library.php';
// Leggi l'input
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));
// TODO: Crea un'istanza di Library
// TODO: Crea un User con ID 1 e nome "Alice"
// TODO: Crea un Book con l'ISBN e il titolo forniti e con autore "Unknown"
// TODO: Aggiungi il libro alla libreria
// TODO: Esegui queste operazioni e stampa ogni risultato su una nuova riga:
// 1. Prendi in prestito il libro
// 2. Prova a prendere di nuovo in prestito lo stesso libro
// 3. Restituisci il libro
// 4. Prendi ancora una volta in prestito il libro
?>Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti della programmazione orientata agli oggetti
File esterniIntroduzione alla programmazione orientata agli oggettiClassi e oggettiLa parola chiave $thisMetodiProprietàCostruttore (__construct)Distruttore (__destruct)Riepilogo - Calcolatrice semplice4Ereditarietà
Ereditarietà di baseLa parola chiave parent::Sovrascrittura dei metodiLa parola chiave finalClassi astratteRiepilogo - Gerarchia dei dipendenti7Incapsulamento
Pubblico, Protetto, PrivatoApprofondimento sui modificatori di accessoGetter e SetterOccultamento delle informazioniPromozione dei parametri del costruttore (8.0)Riepilogo - Sistema di gestione dei registri degli studenti10Concetti avanzati di programmazione a oggetti
Composizione vs ereditarietàDependency InjectionClassi anonimeEnumerazioni (PHP 8.1)Fibers (PHP 8.1)Approfondimento sulla clonazione degli oggettiGeneratori e iteratori13Modelli di progettazione, parte 2
Modello CommandModello AdapterModello DecoratorModello Template MethodModello StateModello CompositeModello Repository2Namespace e autoloading
Introduzione ai namespaceLa keyword useStandard di autoloading PSR-4Autoloader di ComposerRiepilogo - Progetto organizzato5Interfacce e contratti
Introduzione alle interfacceImplementare le interfacceImplementare più interfacceInterfaccia vs classe astrattaType hinting con le interfacceRiepilogo - Calcolatore di forme8Metodi magici
Introduzione ai metodi magici__toString e __debugInfo__get, __set, __isset, __unset__call e __callStatic__clone e clonazione degli oggetti__serialize e __unserializeRiepilogo - Collezione personalizzata11Sistema dei tipi e gestione degli errori
Dichiarazioni di tipoTipi nullableTipi unione e intersezioneClassi di eccezioneGerarchia di eccezioni personalizzataTry, Catch, FinallyRiepilogo - Validatore di moduli14Progetto: Gestione della biblioteca
Panoramica del progettoClassi Libro e Utente3Proprietà delle classi
Proprietà di istanza e staticheCostanti nelle classiMetodi e proprietà staticiProprietà private e protectedProprietà readonly (PHP 8.1)Riepilogo - Gestore di conti bancari6Polimorfismo
Ridefinizione dei metodi, ripresaPolimorfismo tramite interfacceSuggerimenti sui tipi e tipi UnionBinding statico tardivoRiepilogo - Processore di pagamenti9Tratti
Introduzione ai trattiUtilizzare più trattiRisoluzione dei conflitti tra trattiMetodi astratti nei trattiTratti vs ereditarietà12Design pattern - Parte 1
Introduzione ai design patternPattern SingletonPattern FactoryPattern ObserverPattern StrategyEsercitati da solo: Compilatore PHP online