Interface d'administration
Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy — leçon 86 sur 91.
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 classeBookavec des propriétés en lecture seule (isbn,title,author), une propriété privée$isAvailableinitialisée àtrue, et les méthodes :isAvailable(),markAsBorrowed(), etmarkAsReturned().User.php— Inclue le fichier Book. Ta classeUseravec des propriétés en lecture seule (id,name), un tableau privé$borrowedBooks, une constanteMAX_BOOKSde3, et les méthodes :getBorrowedBooks(),canBorrow(),addBook(Book $book), etremoveBook(string $isbn).Library.php— Inclue le fichier User. Ta classeLibraryavec les fonctionnalités existantes incluantaddBook(),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 utilisantunset()
Admin.php— Inclue le fichier Library. Crée une classeAdminqui étendUser. 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]"
- Si le livre n'existe pas, retourne
main.php— Inclue le fichier Admin. Tu recevras deux entrées : un ISBN et un titre de livre.Crée une
Libraryet unAdminavec l'ID1et le nom"AdminUser". Crée également unUserrégulier avec l'ID2et le nom"RegularUser".Crée un
Bookavec l'ISBN fourni, le titre, et l'auteur"Test Author". Effectue ces opérations et affiche chaque résultat sur une nouvelle ligne :- Fais en sorte que l'administrateur ajoute le livre à la bibliothèque
- Fais en sorte que l'utilisateur régulier emprunte le livre
- Fais en sorte que l'administrateur tente de supprimer le livre (cela devrait échouer — il est emprunté)
- Fais en sorte que l'utilisateur régulier rende le livre
- Fais en sorte que l'administrateur supprime le livre (cela devrait réussir maintenant)
- 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
1Les bases de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe mot-clé $thisMéthodesPropriétésConstructeur (__construct)Destructeur (__destruct)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLe mot-clé parent::Redéfinition de méthodeLe mot-clé finalClasses abstraitesRécapitulatif - Hiérarchie des employés7Encapsulation
Public, Protégé, PrivéModificateurs d'accès en détailGetters et SettersMasquage d'informationPromotion de constructeur (8.0)Récapitulatif - Système de gestion d'étudiants10Concepts avancés de la POO
Composition vs HéritageInjection de dépendancesClasses anonymesÉnumérations (PHP 8.1)Fibers (PHP 8.1)Clonage d'objets : analyse approfondieGénérateurs et Itérateurs13Patrons de conception Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode ModèlePatron ÉtatPatron CompositePatron Repository2Espaces de noms et Autoloading
Introduction aux espaces de nomsLe mot-clé useStandard d'Autoloading PSR-4L'Autoloader ComposerRécapitulatif - Projet organisé5Interfaces et Contrats
Introduction aux InterfacesImplémentation d'InterfacesImplémentation d'Interfaces MultiplesInterface vs Classe AbstraiteType Hinting avec les InterfacesRécapitulatif - Calculateur de Formes8Méthodes magiques
Introduction aux méthodes magiques__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Clonage d'objets__serialize & __unserializeRécapitulatif - Collection personnalisée11Système de types et gestion des erreurs
Déclarations de typesTypes nullablesTypes d'union et d'intersectionClasses d'exceptionHiérarchie d'exceptions personnaliséesTry, Catch, FinallyRécapitulatif - Validateur de formulaire14Projet : Gestion de bibliothèque
Présentation du projetClasses Livre et Utilisateur3Propriétés de classe
Propriétés d'instance vs Propriétés statiquesConstantes dans les classesMéthodes et propriétés statiquesPropriétés privées et protégéesPropriétés readonly (PHP 8.1)Récapitulatif - Gestionnaire de compte bancaire6Polymorphisme
Retour sur la redéfinition de méthodePolymorphisme via les interfacesType Hinting et Types d'unionLiaison statique tardiveRécapitulatif - Processeur de paiement9Traits
Introduction aux TraitsUtilisation de plusieurs TraitsRésolution des conflits de TraitsMéthodes abstraites dans les TraitsTraits vs Héritage12Patrons de conception Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron ObservateurPatron Stratégie