Menu
Coddy logo textTech

Classes Livro e Usuário

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

challenge icon

Desafio

Fácil

Vamos construir a base do nosso Sistema de Gerenciamento de Biblioteca criando as classes Book e User. Esses objetos de domínio centrais trabalharão juntos para gerenciar as operações da biblioteca.

Você organizará seu código em três arquivos:

  • Book.php — Crie uma classe Book que rastreia os livros da biblioteca. Seu livro deve ter três propriedades readonly definidas via promoção de construtor: isbn, title e author. Inclua uma propriedade privada $isAvailable que começa como true. Adicione três métodos:
    • isAvailable(): bool — retorna o status de disponibilidade
    • markAsBorrowed(): void — define a disponibilidade como false
    • markAsReturned(): void — define a disponibilidade como true
  • User.php — Inclua o arquivo Book e crie uma classe User representando os membros da biblioteca. Seu usuário deve ter duas propriedades readonly via promoção de construtor: id (int) e name (string). Inclua um array privado $borrowedBooks (inicialmente vazio) e uma constante MAX_BOOKS definida como 3. Adicione estes métodos:
    • getBorrowedBooks(): array — retorna o array de livros emprestados
    • canBorrow(): bool — retorna true se o usuário tiver menos que MAX_BOOKS emprestados
    • addBook(Book $book): void — adiciona um livro ao array de emprestados
    • removeBook(string $isbn): void — remove um livro pelo ISBN usando array_filter
  • main.php — Inclua o arquivo User e dê vida às suas classes. Você receberá quatro entradas: um ID de usuário, nome de usuário, ISBN do livro e título do livro (o autor será "Unknown").

    Crie um User e um Book com os valores fornecidos. Imprima se o usuário pode emprestar inicialmente, depois faça o usuário emprestar o livro (marque-o como emprestado e adicione-o ao usuário). Finalmente, imprima a disponibilidade do livro e a contagem de livros emprestados.

    Formato de saída:

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

Observe como o encapsulamento protege o estado interno — a disponibilidade de um livro só muda através de métodos dedicados, e os livros emprestados de um usuário são gerenciados através de acesso controlado. Esta base suportará o sistema de empréstimo que construiremos a seguir.

Experimente você mesmo

<?php

require_once 'User.php';

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

// TODO: Criar um objeto User com o id e nome fornecidos

// TODO: Criar um objeto Book com o isbn, título e autor fornecidos

// TODO: Imprimir se o usuário pode pegar emprestado inicialmente
// Formato: "Can borrow: yes" ou "Can borrow: no"

// TODO: Fazer o usuário pegar o livro emprestado:
// - Marcar o livro como emprestado
// - Adicionar o livro aos livros emprestados do usuário

// TODO: Imprimir a disponibilidade do livro
// Formato: "Book available: yes" ou "Book available: no"

// TODO: Imprimir a contagem de livros emprestados
// Formato: "Books borrowed: [count]"

?>

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