Funzionalità di ricerca
Fa parte della sezione Programmazione orientata agli oggetti del percorso PHP di Coddy. Lezione 85 di 91.
Sfida
FacileMiglioriamo il nostro sistema di gestione della biblioteca aggiungendo funzionalità di ricerca. Gli utenti devono poter trovare facilmente i libri, sia che cerchino un titolo specifico, sfoglino i libri per autore o controllino quali sono attualmente disponibili per il prestito.
Organizzerai il codice in quattro file:
Book.php: la tua classeBookcon proprietà readonly (isbn,title,author), una proprietà privata$isAvailableinizializzata atruee i metodi:isAvailable(),markAsBorrowed()emarkAsReturned().User.php: includi il file Book. La tua classeUsercon proprietà readonly (id,name), un array privato$borrowedBooks, una costanteMAX_BOOKScon valore3e i metodi:getBorrowedBooks(),canBorrow(),addBook(Book $book)eremoveBook(string $isbn).Library.php: includi il file User. Estendi la tua classeLibrarycon le funzionalità esistenti e tre nuovi metodi di ricerca:searchByTitle(string $keyword): array: restituisce tutti i libri il cui titolo contiene la parola chiave (senza distinzione tra maiuscole e minuscole)searchByAuthor(string $author): array: restituisce tutti i libri il cui autore contiene il termine di ricerca (senza distinzione tra maiuscole e minuscole)getAvailableBooks(): array: restituisce solo i libri attualmente disponibili per il prestito
Usa
array_filtercon funzioni freccia estriposper la corrispondenza senza distinzione tra maiuscole e minuscole. Ricorda chestriposrestituiscefalsequando non trova corrispondenze, quindi verifica con!== false.main.php: includi il file Library. Riceverai due input: una parola chiave di ricerca e un nome di autore.Crea una
Librarye aggiungi questi quattro libri:- ISBN:
"978-0", Titolo:"PHP Basics", Autore:"John Smith" - ISBN:
"978-1", Titolo:"Advanced PHP", Autore:"Jane Doe" - ISBN:
"978-2", Titolo:"Python Guide", Autore:"John Smith" - ISBN:
"978-3", Titolo:"Web Development", Autore:"Alice Brown"
Prendi in prestito il libro con ISBN
"978-1"usando unUsercon ID1e nome"TestUser".Poi esegui queste ricerche e stampa i risultati:
- Cerca per titolo usando il primo input e stampa il titolo di ogni libro corrispondente su una nuova riga
- Cerca per autore usando il secondo input e stampa il numero di libri corrispondenti
- Ottieni i libri disponibili e stampa il numero
Formato dell'output:
Title matches: [title1] [title2] ... Author matches: [count] Available: [count]- ISBN:
Questa sfida dimostra come array_filter combinato con stripos permetta di creare funzionalità di ricerca efficaci e intuitive. La corrispondenza senza distinzione tra maiuscole e minuscole fa sì che gli utenti non debbano preoccuparsi di usare le maiuscole esatte durante la ricerca.
Provalo tu
<?php
require_once 'Library.php';
// Leggi gli input
$searchKeyword = trim(fgets(STDIN));
$authorName = trim(fgets(STDIN));
// TODO: Crea un'istanza di Library
// TODO: Aggiungi i quattro libri alla biblioteca:
// ISBN: "978-0", Titolo: "PHP Basics", Autore: "John Smith"
// ISBN: "978-1", Titolo: "Advanced PHP", Autore: "Jane Doe"
// ISBN: "978-2", Titolo: "Python Guide", Autore: "John Smith"
// ISBN: "978-3", Titolo: "Web Development", Autore: "Alice Brown"
// TODO: Crea un User con ID 1 e nome "TestUser", poi registralo
// TODO: Prendi in prestito il libro con ISBN "978-1"
// TODO: Cerca per titolo usando $searchKeyword e stampa i risultati
echo "Title matches:\n";
// Stampa il titolo di ogni libro corrispondente su una nuova riga
// TODO: Cerca per autore usando $authorName e stampa il numero di risultati
echo "Author matches: " . /* conteggio qui */ "\n";
// TODO: Ottieni i libri disponibili e stampa il conteggio
echo "Available: " . /* conteggio qui */ "\n";
?>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