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 la base de nuestro Sistema de Gestión de Biblioteca creando las clases Book y User. Estos objetos de dominio centrales 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 rastree los libros de la biblioteca. Tu libro debe tener tres propiedades de solo lectura (readonly) establecidas mediante la promoción del constructor: isbn, title y author. Incluye una propiedad privada $isAvailable que comience como 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 la promoción del 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 prestados
    • addBook(Book $book): void — añade un libro al array de prestados
    • removeBook(string $isbn): void — elimina un libro por ISBN usando array_filter
  • main.php — Incluye el archivo User y da vida a tus clases. Recibirás cuatro entradas: un ID de usuario, un nombre de usuario, un ISBN de libro y un título de libro (el autor será "Unknown").

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

    Formato de salida:

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

Observa cómo el encapsulamiento protege el estado interno: la disponibilidad de un libro solo cambia a través de métodos dedicados, y los libros prestados de un usuario se gestionan mediante un acceso controlado. Esta base servirá de apoyo al 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: Crear un objeto User con el id y el nombre proporcionados

// TODO: Crear un objeto Book con el isbn, título y autor proporcionados

// TODO: Imprimir si el usuario puede pedir prestado inicialmente
// Formato: "Can borrow: yes" o "Can borrow: no"

// TODO: Hacer que el usuario pida prestado el libro:
// - Marcar el libro como prestado
// - Añadir el libro a los libros prestados del usuario

// TODO: Imprimir la disponibilidad del libro
// Formato: "Book available: yes" o "Book available: no"

// TODO: Imprimir el recuento de libros prestados
// Formato: "Books borrowed: [count]"

?>

Todas las lecciones de Programación Orientada a Objetos