Funcionalidade de Busca
Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy. Lição 85 de 91.
Desafio
FácilVamos aprimorar nosso Sistema de Gerenciamento de Biblioteca adicionando funcionalidade de pesquisa. Os usuários precisam encontrar livros facilmente, seja procurando um título específico, pesquisando por autor ou verificando o que está disponível para empréstimo no momento.
Você organizará seu código em quatro arquivos:
Book.php: sua classeBookcom propriedades somente leitura (isbn,title,author), uma propriedade privada$isAvailableiniciando comotruee os métodos:isAvailable(),markAsBorrowed()emarkAsReturned().User.php: inclua o arquivo Book. Sua classeUsercom propriedades somente leitura (id,name), um array privado$borrowedBooks, uma constanteMAX_BOOKScom valor3e os métodos:getBorrowedBooks(),canBorrow(),addBook(Book $book)eremoveBook(string $isbn).Library.php: inclua o arquivo User. Amplie sua classeLibrarycom a funcionalidade existente, além de três novos métodos de pesquisa:searchByTitle(string $keyword): array: retorna todos os livros cujo título contém a palavra-chave (sem distinção entre maiúsculas e minúsculas)searchByAuthor(string $author): array: retorna todos os livros cujo nome do autor contém o termo de pesquisa (sem distinção entre maiúsculas e minúsculas)getAvailableBooks(): array: retorna apenas os livros que estão disponíveis para empréstimo no momento
Use
array_filtercom funções de seta estripospara fazer a correspondência sem distinção entre maiúsculas e minúsculas. Lembre-se de questriposretornafalsequando nenhuma correspondência é encontrada; portanto, verifique se é!== false.main.php: inclua o arquivo Library. Você receberá duas entradas: uma palavra-chave de pesquisa e um nome de autor.Crie uma
Librarye adicione estes quatro livros:- ISBN:
"978-0", Título:"PHP Basics", Autor:"John Smith" - ISBN:
"978-1", Título:"Advanced PHP", Autor:"Jane Doe" - ISBN:
"978-2", Título:"Python Guide", Autor:"John Smith" - ISBN:
"978-3", Título:"Web Development", Autor:"Alice Brown"
Empreste o livro com ISBN
"978-1"usando umUsercom ID1e nome"TestUser".Em seguida, realize estas pesquisas e imprima os resultados:
- Pesquise por título usando a primeira entrada e imprima o título de cada livro correspondente em uma nova linha
- Pesquise por autor usando a segunda entrada e imprima a quantidade de livros correspondentes
- Obtenha os livros disponíveis e imprima a quantidade
Formato da saída:
Title matches: [title1] [title2] ... Author matches: [count] Available: [count]- ISBN:
Este desafio demonstra como array_filter, combinado com stripos, cria uma funcionalidade de pesquisa poderosa e fácil de usar. A correspondência sem distinção entre maiúsculas e minúsculas significa que os usuários não precisam se preocupar com a capitalização exata ao pesquisar.
Experimente você mesmo
<?php
require_once 'Library.php';
// Ler entradas
$searchKeyword = trim(fgets(STDIN));
$authorName = trim(fgets(STDIN));
// TODO: Crie uma instância de Library
// TODO: Adicione os quatro livros à biblioteca:
// ISBN: "978-0", Título: "PHP Basics", Autor: "John Smith"
// ISBN: "978-1", Título: "Advanced PHP", Autor: "Jane Doe"
// ISBN: "978-2", Título: "Python Guide", Autor: "John Smith"
// ISBN: "978-3", Title: "Web Development", Author: "Alice Brown"
// TODO: Crie um User com ID 1 e nome "TestUser", registre-o
// TODO: Empreste o livro com ISBN "978-1"
// TODO: Pesquise por título usando $searchKeyword e imprima os resultados
echo "Title matches:\n";
// Imprima o título de cada livro correspondente em uma nova linha
// TODO: Pesquise por autor usando $authorName e imprima a contagem
echo "Author matches: " . /* contagem aqui */ "\n";
// TODO: Obtenha os livros disponíveis e imprima a contagem
echo "Available: " . /* contagem aqui */ "\n";
?>Todas as lições de Programação Orientada a Objetos
1Fundamentos de OOP
Arquivos externosIntrodução à OOPClasses vs. objetosA palavra-chave $thisMétodosPropriedadesConstrutor (__construct)Destrutor (__destruct)Recapitulação - Calculadora simples4Herança
Herança BásicaA Palavra-chave parent::Sobrescrita de MétodosA Palavra-chave finalClasses AbstratasRecapitulação - Hierarquia de Funcionários7Encapsulamento
Público, Protegido, PrivadoModificadores de Acesso em ProfundidadeGetters e SettersOcultação de InformaçõesPromoção de Construtor (8.0)Recapitulação - Sistema de Registros de Alunos10Conceitos Avançados de OOP
Composição vs. HerançaInjeção de DependênciaClasses AnônimasEnums (PHP 8.1)Fibras (PHP 8.1)Análise Profunda da Clonagem de ObjetosGeradores e Iteradores13Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão CompositePadrão Repository2Namespaces e Autoloading
Introdução a NamespacesA palavra-chave usePadrão de Autoloading PSR-4Autoloader do ComposerRecapitulação - Projeto organizado5Interfaces e Contratos
Introdução às InterfacesImplementando InterfacesImplementação de Múltiplas InterfacesInterface vs Classe AbstrataTipagem com InterfacesRecapitulação - Calculadora de Formas8Métodos Mágicos
Introdução aos Métodos Mágicos__toString e __debugInfo__get, __set, __isset, __unset__call e __callStatic__clone e Clonagem de Objetos__serialize e __unserializeRecapitulação - Coleção Personalizada11Sistema de Tipos e Tratamento de Erros
Declarações de TiposTipos NulosTipos de União e InterseçãoClasses de ExceçãoHierarquia de Exceções PersonalizadaTry, Catch, FinallyRecapitulação - Validador de Formulário14Projeto: Gerenciamento de Biblioteca
Visão Geral do ProjetoClasses de Livros e Usuários3Propriedades de Classes
Propriedades de Instância vs. EstáticasConstantes em ClassesMétodos e Propriedades EstáticosPropriedades Privadas e ProtegidasPropriedades Somente para Leitura (PHP 8.1)Recapitulação - Gerenciador de Contas Bancárias6Polimorfismo
Revisão da Sobrescrita de MétodosPolimorfismo via InterfacesIndicação de Tipos e Tipos UnionVinculação Estática TardiaRecapitulação - Processador de Pagamentos9Traits
Introdução a TraitsUsando Múltiplos TraitsResolução de Conflitos entre TraitsMétodos Abstratos em TraitsTraits vs. Herança12Padrões de Projeto – Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão StrategyPratique por conta própria: Compilador de PHP online