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

Étendons notre système de gestion de bibliothèque en lui ajoutant des fonctionnalités administratives. Vous allez créer une classe Admin qui hérite de User, mais dispose de pouvoirs spéciaux pour gérer l’inventaire de la bibliothèque : ajouter de nouveaux livres et supprimer ceux qui existent déjà.

Vous organiserez votre code sur cinq fichiers :

  • Book.php : votre classe Book avec des propriétés readonly (isbn, title, author), une propriété privée $isAvailable initialisée à true, ainsi que les méthodes suivantes : isAvailable(), markAsBorrowed() et markAsReturned().
  • User.php : incluez le fichier Book. Votre classe User avec des propriétés readonly (id, name), un tableau privé $borrowedBooks, une constante MAX_BOOKS valant 3, ainsi que les méthodes suivantes : getBorrowedBooks(), canBorrow(), addBook(Book $book) et removeBook(string $isbn).
  • Library.php : incluez le fichier User. Votre classe Library avec les fonctionnalités existantes, notamment addBook(), findBook(), borrowBook(), returnBook() et les méthodes de recherche. Ajoutez une nouvelle méthode :
    • removeBook(string $isbn): void : supprime un livre de la collection à l’aide de unset()
  • Admin.php : incluez le fichier Library. Créez une classe Admin qui étend User. Les administrateurs héritent de toutes les fonctionnalités des utilisateurs, mais bénéficient de deux méthodes administratives supplémentaires :
    • addBookToLibrary(Library $library, Book $book): string : ajoute le livre à la bibliothèque et renvoie "Added: [title]"
    • removeBookFromLibrary(Library $library, string $isbn): string : tente de supprimer un livre en effectuant les vérifications suivantes :
      • Si le livre n’existe pas, renvoie "Book not found"
      • Si le livre est actuellement emprunté, renvoie "Cannot remove: book is currently borrowed"
      • Sinon, le supprime et renvoie "Removed: [title]"
  • main.php : incluez le fichier Admin. Vous recevrez deux entrées : un ISBN et le titre d’un livre.

    Créez une Library et un Admin avec l’ID 1 et le nom "AdminUser". Créez également un User standard avec l’ID 2 et le nom "RegularUser".

    Créez un Book avec l’ISBN et le titre fournis, ainsi qu’avec l’auteur "Test Author". Effectuez les opérations suivantes et affichez chaque résultat sur une nouvelle ligne :

    1. Demandez à l’administrateur d’ajouter le livre à la bibliothèque
    2. Demandez à l’utilisateur standard d’emprunter le livre
    3. Demandez à l’administrateur d’essayer de supprimer le livre (cela doit échouer : il est emprunté)
    4. Demandez à l’utilisateur standard de rendre le livre
    5. Demandez à l’administrateur de supprimer le livre (cela doit maintenant réussir)
    6. Demandez à l’administrateur d’essayer à nouveau de supprimer le même livre (cela doit échouer, car le livre est introuvable)

Ce défi montre comment l’héritage crée une hiérarchie naturelle : les administrateurs sont des utilisateurs disposant de 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 Library

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

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

// TODO: Créer un 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'admin ajoute le livre à la library
// 2. Faire en sorte que l'utilisateur régulier emprunte le livre
// 3. Faire en sorte que l'admin essaie de retirer le livre (doit échouer - il est emprunté)
// 4. Faire en sorte que l'utilisateur régulier retourne le livre
// 5. Faire en sorte que l'admin retire le livre (doit réussir maintenant)
// 6. Faire en sorte que l'admin essaie de retirer le même livre à nouveau (doit échouer - non trouvé)

?>

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur PHP en ligne