Menu
Coddy logo textTech

Clases de libros y usuarios

Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy. Lección 83 de 91.

challenge icon

Desafío

Fácil

Construyamos los cimientos de nuestro sistema de gestión de biblioteca creando las clases Book y User. Estos objetos de dominio principales trabajarán juntos para gestionar las operaciones de la biblioteca.

Organizarás tu código en tres archivos:

  • Book.php: Crea una clase Book que lleve el control de los libros de la biblioteca. Tu libro debe tener tres propiedades de solo lectura establecidas mediante promoción de constructor: isbn, title y author. Incluye una propiedad privada $isAvailable que comience con el valor true. Añade tres métodos:
    • isAvailable(): bool: devuelve el estado de disponibilidad
    • markAsBorrowed(): void: establece la disponibilidad en false
    • markAsReturned(): void: establece la disponibilidad en true
  • User.php: Incluye el archivo Book y crea una clase User que represente a los miembros de la biblioteca. Tu usuario debe tener dos propiedades de solo lectura mediante promoción de constructor: id (int) y name (string). Incluye un array privado $borrowedBooks (inicialmente vacío) y una constante MAX_BOOKS establecida en 3. Añade estos métodos:
    • getBorrowedBooks(): array: devuelve el array de libros prestados
    • canBorrow(): bool: devuelve true si el usuario tiene menos de MAX_BOOKS libros prestados
    • addBook(Book $book): void: añade un libro al array de libros prestados
    • removeBook(string $isbn): void: elimina un libro por ISBN usando array_filter
  • main.php: Incluye el archivo User y pon tus clases en funcionamiento. Recibirás cuatro entradas: el ID del usuario, el nombre del usuario, el ISBN del libro y el título del libro (el autor será "Unknown").

    Crea un User y un Book con los valores proporcionados. Imprime si el usuario puede pedir prestado inicialmente, después haz que el usuario pida prestado el libro (márcalo como prestado y añádelo al usuario). Finalmente, imprime la disponibilidad del libro y la cantidad de libros prestados.

    Formato de salida:

    Can borrow: [yes/no]
    Book available: [yes/no]
    Books borrowed: [count]

Observa cómo la encapsulación protege el estado interno: la disponibilidad de un libro solo cambia mediante métodos específicos, y los libros prestados de un usuario se gestionan mediante un acceso controlado. Estos cimientos respaldarán el sistema de préstamos que construiremos a continuación.

Pruébalo tú mismo

<?php

require_once 'User.php';

// Leer entradas
$userId = intval(trim(fgets(STDIN)));
$userName = trim(fgets(STDIN));
$bookIsbn = trim(fgets(STDIN));
$bookTitle = trim(fgets(STDIN));
$bookAuthor = "Unknown";

// TODO: Crea un objeto User con el id y name proporcionados

// TODO: Crea un objeto Book con el isbn, title y author proporcionados

// TODO: Imprime si el usuario puede pedir prestado inicialmente
// Format: "Can borrow: yes" or "Can borrow: no"

// TODO: Haz que el usuario pida prestado el libro:
// - Marca el libro como prestado
// - Añade el libro a los libros prestados del usuario

// TODO: Imprime la disponibilidad del libro
// Format: "Book available: yes" or "Book available: no"

// TODO: Imprime el conteo de libros prestados
// Format: "Books borrowed: [count]"

?>

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de PHP online