Menu
Coddy logo textTech

Funcionalidade de Busca

Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy — lição 85 de 91.

challenge icon

Desafio

Fácil

Vamos aprimorar nosso Sistema de Gerenciamento de Biblioteca adicionando funcionalidade de busca. Os usuários precisam encontrar livros facilmente, seja procurando por um título específico, navegando por autor ou verificando o que está disponível no momento para empréstimo.

Você organizará seu código em quatro arquivos:

  • Book.php — Sua classe Book com propriedades readonly (isbn, title, author), uma propriedade privada $isAvailable iniciando como true, e os métodos: isAvailable(), markAsBorrowed() e markAsReturned().
  • User.php — Inclua o arquivo Book. Sua classe User com propriedades readonly (id, name), um array privado $borrowedBooks, uma constante MAX_BOOKS de 3, e os métodos: getBorrowedBooks(), canBorrow(), addBook(Book $book) e removeBook(string $isbn).
  • Library.php — Inclua o arquivo User. Expanda sua classe Library com a funcionalidade existente mais três novos métodos de busca:
    • searchByTitle(string $keyword): array — retorna todos os livros onde o título contém a palavra-chave (insensível a maiúsculas e minúsculas)
    • searchByAuthor(string $author): array — retorna todos os livros onde o nome do autor contém o termo de busca (insensível a maiúsculas e minúsculas)
    • getAvailableBooks(): array — retorna apenas os livros que estão disponíveis no momento para empréstimo

    Use array_filter com arrow functions e stripos para correspondência insensível a maiúsculas e minúsculas. Lembre-se que stripos retorna false quando nenhuma correspondência é encontrada, então verifique por !== false.

  • main.php — Inclua o arquivo Library. Você receberá duas entradas: uma palavra-chave de busca e um nome de autor.

    Crie uma Library e adicione estes quatro livros:

    • ISBN: "978-0", Title: "PHP Basics", Author: "John Smith"
    • ISBN: "978-1", Title: "Advanced PHP", Author: "Jane Doe"
    • ISBN: "978-2", Title: "Python Guide", Author: "John Smith"
    • ISBN: "978-3", Title: "Web Development", Author: "Alice Brown"

    Empreste o livro com ISBN "978-1" usando um User com ID 1 e nome "TestUser".

    Em seguida, realize estas buscas e imprima os resultados:

    1. Busque por título usando a primeira entrada, imprima o título de cada livro correspondente em uma nova linha
    2. Busque por autor usando a segunda entrada, imprima a contagem de livros correspondentes
    3. Obtenha os livros disponíveis e imprima a contagem

    Formato de saída:

    Title matches:
    [title1]
    [title2]
    ...
    Author matches: [count]
    Available: [count]

Este desafio demonstra como o array_filter combinado com o stripos cria uma funcionalidade de busca poderosa e amigável ao usuário. A correspondência insensível a 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: Criar uma instância de Library

// TODO: Adicionar os quatro livros à biblioteca:
// ISBN: "978-0", Title: "PHP Basics", Author: "John Smith"
// ISBN: "978-1", Title: "Advanced PHP", Author: "Jane Doe"
// ISBN: "978-2", Title: "Python Guide", Author: "John Smith"
// ISBN: "978-3", Title: "Web Development", Author: "Alice Brown"

// TODO: Criar um User com ID 1 e nome "TestUser", registrá-lo

// TODO: Emprestar o livro com ISBN "978-1"

// TODO: Pesquisar por título usando $searchKeyword e imprimir os resultados
echo "Title matches:\n";
// Imprimir o título de cada livro correspondente em uma nova linha

// TODO: Pesquisar por autor usando $authorName e imprimir a contagem
echo "Author matches: " . /* contagem aqui */ "\n";

// TODO: Obter livros disponíveis e imprimir a contagem
echo "Available: " . /* contagem aqui */ "\n";

?>

Todas as lições de Programação Orientada a Objetos