Menu
Coddy logo textTech

Interface d'administration

Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy — leçon 86 sur 91.

challenge icon

Défi

Facile

Étends notre système de gestion de bibliothèque en ajoutant des capacités administratives. Tu vas créer une classe Admin qui hérite de User mais possède des pouvoirs spéciaux pour gérer l'inventaire de la bibliothèque — ajouter de nouveaux livres et supprimer ceux existants.

Tu organiseras ton code sur cinq fichiers :

  • Book.php — Ta classe Book avec des propriétés en lecture seule (isbn, title, author), une propriété privée $isAvailable initialisée à true, et les méthodes : isAvailable(), markAsBorrowed(), et markAsReturned().
  • User.php — Inclue le fichier Book. Ta classe User avec des propriétés en lecture seule (id, name), un tableau privé $borrowedBooks, une constante MAX_BOOKS de 3, et les méthodes : getBorrowedBooks(), canBorrow(), addBook(Book $book), et removeBook(string $isbn).
  • Library.php — Inclue le fichier User. Ta classe Library avec les fonctionnalités existantes incluant addBook(), findBook(), borrowBook(), returnBook(), et les méthodes de recherche. Ajoute une nouvelle méthode :
    • removeBook(string $isbn): void — supprime un livre de la collection en utilisant unset()
  • Admin.php — Inclue le fichier Library. Crée une classe Admin qui étend User. Les administrateurs héritent de toutes les capacités de l'utilisateur mais gagnent deux méthodes administratives :
    • addBookToLibrary(Library $library, Book $book): string — ajoute le livre à la bibliothèque et retourne "Added: [title]"
    • removeBookFromLibrary(Library $library, string $isbn): string — tente de supprimer un livre avec ces vérifications :
      • Si le livre n'existe pas, retourne "Book not found"
      • Si le livre est actuellement emprunté, retourne "Cannot remove: book is currently borrowed"
      • Sinon, supprime-le et retourne "Removed: [title]"
  • main.php — Inclue le fichier Admin. Tu recevras deux entrées : un ISBN et un titre de livre.

    Crée une Library et un Admin avec l'ID 1 et le nom "AdminUser". Crée également un User régulier avec l'ID 2 et le nom "RegularUser".

    Crée un Book avec l'ISBN fourni, le titre, et l'auteur "Test Author". Effectue ces opérations et affiche chaque résultat sur une nouvelle ligne :

    1. Fais en sorte que l'administrateur ajoute le livre à la bibliothèque
    2. Fais en sorte que l'utilisateur régulier emprunte le livre
    3. Fais en sorte que l'administrateur tente de supprimer le livre (cela devrait échouer — il est emprunté)
    4. Fais en sorte que l'utilisateur régulier rende le livre
    5. Fais en sorte que l'administrateur supprime le livre (cela devrait réussir maintenant)
    6. Fais en sorte que l'administrateur tente de supprimer à nouveau le même livre (cela devrait échouer — non trouvé)

Ce défi démontre comment l'héritage crée une hiérarchie naturelle — les administrateurs sont des utilisateurs avec des privilèges supplémentaires. Les vérifications de sécurité dans removeBookFromLibrary garantissent l'intégrité des données en empêchant la suppression de livres qui sont encore en circulation.

Essayez vous-même

<?php
require_once 'Admin.php';

// Lire l'entrée
$isbn = trim(fgets(STDIN));
$title = trim(fgets(STDIN));

// TODO: Créer une bibliothèque (Library)

// TODO: Créer un administrateur (Admin) avec l'ID 1 et le nom "AdminUser"

// TODO: Créer un utilisateur régulier (User) avec l'ID 2 et le nom "RegularUser"

// TODO: Créer un livre (Book) avec l'ISBN fourni, le titre, et l'auteur "Test Author"

// TODO: Effectuer ces opérations et afficher chaque résultat sur une nouvelle ligne :
// 1. Faire en sorte que l'administrateur ajoute le livre à la bibliothèque
// 2. Faire en sorte que l'utilisateur régulier emprunte le livre
// 3. Faire en sorte que l'administrateur essaie de supprimer le livre (devrait échouer - il est emprunté)
// 4. Faire en sorte que l'utilisateur régulier rende le livre
// 5. Faire en sorte que l'administrateur supprime le livre (devrait réussir maintenant)
// 6. Faire en sorte que l'administrateur essaie de supprimer à nouveau le même livre (devrait échouer - non trouvé)

?>

Toutes les leçons de Programmation Orientée Objet