Interfaz de administración
Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy. Lección 86 de 91.
Desafío
FácilAmpliemos nuestro sistema de gestión de bibliotecas añadiendo capacidades administrativas. Crearás una clase Admin que hereda de User, pero que tiene permisos especiales para gestionar el inventario de la biblioteca: añadir libros nuevos y eliminar los existentes.
Organizarás tu código en cinco 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 valor3y los métodos:getBorrowedBooks(),canBorrow(),addBook(Book $book)yremoveBook(string $isbn).Library.php: Incluye el archivo User. Tu claseLibrarycon la funcionalidad existente, incluidosaddBook(),findBook(),borrowBook(),returnBook()y los métodos de búsqueda. Añade un método nuevo:removeBook(string $isbn): void: elimina un libro de la colección usandounset()
Admin.php: Incluye el archivo Library. Crea una claseAdminque extiendaUser. Los administradores heredan todas las capacidades de los usuarios, pero obtienen dos métodos administrativos:addBookToLibrary(Library $library, Book $book): string: añade el libro a la biblioteca y devuelve"Added: [title]"removeBookFromLibrary(Library $library, string $isbn): string: intenta eliminar un libro con estas comprobaciones:- Si el libro no existe, devuelve
"Book not found" - Si el libro está prestado actualmente, devuelve
"Cannot remove: book is currently borrowed" - De lo contrario, lo elimina y devuelve
"Removed: [title]"
- Si el libro no existe, devuelve
main.php: Incluye el archivo Admin. Recibirás dos entradas: un ISBN y el título de un libro.Crea una
Libraryy unAdmincon el ID1y el nombre"AdminUser". Crea también unUsernormal con el ID2y el nombre"RegularUser".Crea un
Bookcon el ISBN y el título proporcionados, y con el autor"Test Author". Realiza estas operaciones e imprime cada resultado en una línea nueva:- Haz que el administrador añada el libro a la biblioteca
- Haz que el usuario normal pida prestado el libro
- Haz que el administrador intente eliminar el libro (debe fallar: está prestado)
- Haz que el usuario normal devuelva el libro
- Haz que el administrador elimine el libro (ahora debe tener éxito)
- Haz que el administrador intente eliminar el mismo libro otra vez (debe fallar porque no se encuentra)
Este desafío demuestra cómo la herencia crea una jerarquía natural: los administradores son usuarios con privilegios adicionales. Las comprobaciones de seguridad en removeBookFromLibrary garantizan la integridad de los datos al impedir la eliminación de libros que todavía están en circulación.
Pruébalo tú mismo
<?php
require_once 'Admin.php';
// Leer entrada
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));
// TODO: Crear una Library
// TODO: Crear un Admin con ID 1 y nombre "AdminUser"
// TODO: Crear un User regular con ID 2 y nombre "RegularUser"
// TODO: Crear un Book con el ISBN, título y autor "Test Author" proporcionados
// TODO: Realizar estas operaciones e imprimir cada resultado en una nueva línea:
// 1. Hacer que el admin agregue el book a la library
// 2. Hacer que el user regular tome prestado el book
// 3. Hacer que el admin intente eliminar el book (debe fallar - está prestado)
// 4. Hacer que el user regular devuelva el book
// 5. Hacer que el admin elimine el book (ahora debe tener éxito)
// 6. Hacer que el admin intente eliminar el mismo book de nuevo (debe fallar - no encontrado)
?>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