Funcionalidad de búsqueda
Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy. Lección 85 de 91.
Desafío
FácilMejoremos nuestro Sistema de Gestión de Bibliotecas añadiendo funcionalidad de búsqueda. Los usuarios necesitan encontrar libros fácilmente, ya sea que busquen un título específico, exploren por autor o comprueben qué está disponible actualmente para pedir prestado.
Organizarás tu código en cuatro archivos:
Book.php: Tu claseBookcon propiedades de solo lectura (isbn,title,author), una propiedad privada$isAvailableque comienza comotruey los métodos:isAvailable(),markAsBorrowed()ymarkAsReturned().User.php: Incluye el archivo Book. Tu claseUsercon propiedades de solo lectura (id,name), un arreglo privado$borrowedBooks, una constanteMAX_BOOKScon el valor3y los métodos:getBorrowedBooks(),canBorrow(),addBook(Book $book)yremoveBook(string $isbn).Library.php: Incluye el archivo User. Amplía tu claseLibrarycon la funcionalidad existente y tres nuevos métodos de búsqueda:searchByTitle(string $keyword): array: devuelve todos los libros cuyo título contiene la palabra clave (sin distinguir entre mayúsculas y minúsculas)searchByAuthor(string $author): array: devuelve todos los libros cuyo nombre de autor contiene el término de búsqueda (sin distinguir entre mayúsculas y minúsculas)getAvailableBooks(): array: devuelve únicamente los libros que están disponibles actualmente para pedir prestados
Usa
array_filtercon funciones flecha ystripospara realizar coincidencias sin distinguir entre mayúsculas y minúsculas. Recuerda questriposdevuelvefalsecuando no encuentra ninguna coincidencia, así que comprueba que sea!== false.main.php: Incluye el archivo Library. Recibirás dos entradas: una palabra clave de búsqueda y un nombre de autor.Crea una instancia de
Libraryy añade estos cuatro libros:- 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"
Pide prestado el libro con ISBN
"978-1"usando unUsercon ID1y nombre"TestUser".Después, realiza estas búsquedas e imprime los resultados:
- Busca por título usando la primera entrada e imprime el título de cada libro coincidente en una línea nueva
- Busca por autor usando la segunda entrada e imprime la cantidad de libros coincidentes
- Obtén los libros disponibles e imprime la cantidad
Formato de salida:
Title matches: [title1] [title2] ... Author matches: [count] Available: [count]- ISBN:
Este desafío demuestra cómo array_filter, combinado con stripos, crea una funcionalidad de búsqueda potente y fácil de usar. Las coincidencias sin distinguir entre mayúsculas y minúsculas hacen que los usuarios no tengan que preocuparse por usar exactamente las mismas mayúsculas al realizar una búsqueda.
Pruébalo tú mismo
<?php
require_once 'Library.php';
// Leer entradas
$searchKeyword = trim(fgets(STDIN));
$authorName = trim(fgets(STDIN));
// TODO: Crear una instancia de Library
// TODO: Añadir los cuatro libros a la 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: Crear un User con ID 1 y nombre "TestUser", registrarlo
// TODO: Prestar el libro con ISBN "978-1"
// TODO: Buscar por título usando $searchKeyword e imprimir los resultados
echo "Title matches:\n";
// Imprimir el título de cada libro coincidente en una nueva línea
// TODO: Buscar por autor usando $authorName e imprimir el conteo
echo "Author matches: " . /* conteo aquí */ "\n";
// TODO: Obtén los libros disponibles e imprime el conteo
echo "Available: " . /* conteo aquí */ "\n";
?>Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de la POO
Archivos externosIntroducción a la POOClases frente a objetosLa palabra clave $thisMétodosPropiedadesConstructor (__construct)Destructor (__destruct)Repaso: calculadora simple4Herencia
Herencia básicaLa palabra clave parent::Sobrescritura de métodosLa palabra clave finalClases abstractasRepaso - Jerarquía de empleados7Encapsulación
Público, protegido, privadoModificadores de acceso en profundidadGetters y settersOcultación de la informaciónPromoción del constructor (8.0)Repaso: sistema de registros de estudiantes10Conceptos avanzados de OOP
Composición vs. herenciaInyección de dependenciasClases anónimasEnums (PHP 8.1)Fibras (PHP 8.1)Análisis profundo de la clonación de objetosGeneradores e iteradores13Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón Repository2Namespaces y carga automática
Introducción a los NamespacesLa palabra clave useEstándar de carga automática PSR-4Autoloader de ComposerRepaso: proyecto organizado5Interfaces y contratos
Introducción a las interfacesImplementación de interfacesImplementación de múltiples interfacesInterfaces vs. clase abstractaTipado con interfacesRepaso - Calculadora de formas8Métodos mágicos
Introducción a los métodos mágicos__toString y __debugInfo__get, __set, __isset, __unset__call y __callStatic__clone y clonación de objetos__serialize y __unserializeRepaso: colección personalizada11Sistema de tipos y manejo de errores
Declaraciones de tiposTipos anulablesTipos unión e intersecciónClases de excepcionesJerarquía de excepciones personalizadaTry, Catch, FinallyRepaso: validador de formularios14Proyecto: Gestión de Bibliotecas
Descripción general del proyectoClases de libros y usuarios3Propiedades de clase
Propiedades de instancia vs. estáticasConstantes en clasesMétodos y propiedades estáticosPropiedades privadas y protegidasPropiedades de solo lectura (PHP 8.1)Repaso: gestor de cuentas bancarias6Polimorfismo
Repaso de la sobrescritura de métodosPolimorfismo mediante interfacesAnotaciones de tipo y tipos uniónEnlace estático tardíoRepaso: procesador de pagos9Traits
Introducción a los TraitsUso de múltiples TraitsResolución de conflictos entre TraitsMétodos abstractos en TraitsTraits frente a la herencia12Patrones de diseño, parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón StrategyPractica por tu cuenta: Compilador de PHP online