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É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 classeBookavec des propriétés readonly (isbn,title,author), une propriété privée$isAvailableinitialisée àtrue, ainsi que les méthodes suivantes :isAvailable(),markAsBorrowed()etmarkAsReturned().User.php: incluez le fichier Book. Votre classeUseravec des propriétés readonly (id,name), un tableau privé$borrowedBooks, une constanteMAX_BOOKSvalant3, ainsi que les méthodes suivantes :getBorrowedBooks(),canBorrow(),addBook(Book $book)etremoveBook(string $isbn).Library.php: incluez le fichier User. Votre classeLibraryavec les fonctionnalités existantes, notammentaddBook(),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 deunset()
Admin.php: incluez le fichier Library. Créez une classeAdminqui étendUser. 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]"
- Si le livre n’existe pas, renvoie
main.php: incluez le fichier Admin. Vous recevrez deux entrées : un ISBN et le titre d’un livre.Créez une
Libraryet unAdminavec l’ID1et le nom"AdminUser". Créez également unUserstandard avec l’ID2et le nom"RegularUser".Créez un
Bookavec 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 :- Demandez à l’administrateur d’ajouter le livre à la bibliothèque
- Demandez à l’utilisateur standard d’emprunter le livre
- Demandez à l’administrateur d’essayer de supprimer le livre (cela doit échouer : il est emprunté)
- Demandez à l’utilisateur standard de rendre le livre
- Demandez à l’administrateur de supprimer le livre (cela doit maintenant réussir)
- 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
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses et objetsLe mot-clé $thisMéthodesPropriétésConstructeur (__construct)Destructeur (__destruct)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLe mot-clé parent::Redéfinition des méthodesLe mot-clé finalClasses abstraitesRécapitulatif – Hiérarchie des employés7Encapsulation
Public, Protected, PrivateModificateurs d’accès en profondeurAccesseurs et mutateursDissimulation de l’informationPromotion des constructeurs (8.0)Récapitulatif – Système de fiches étudiant10Concepts avancés de la POO
Composition ou héritageInjection de dépendancesClasses anonymesÉnumérations (PHP 8.1)Fibres (PHP 8.1)Approfondissement du clonage d’objetsGénérateurs et itérateurs13Patrons de conception – Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron CompositePatron Dépôt2Espaces de noms et chargement automatique
Introduction aux espaces de nomsLe mot-clé useNorme de chargement automatique PSR-4Autoloader de ComposerRécapitulatif - Projet organisé5Interfaces et contrats
Introduction aux interfacesImplémentation des interfacesImplémentation de plusieurs interfacesInterface ou classe abstraiteIndication de type avec les interfacesRécapitulatif - Calculateur de formes8Méthodes magiques
Introduction aux méthodes magiques__toString et __debugInfo__get, __set, __isset, __unset__call et __callStatic__clone et clonage d’objets__serialize et __unserializeRécapitulatif - Collection personnalisée11Système de types et gestion des erreurs
Déclarations de typesTypes nullablesTypes union et intersectionClasses d’exceptionsHiérarchie d’exceptions personnaliséeTry, Catch, FinallyRécapitulatif - Validateur de formulaires14Projet : gestion de bibliothèque
Présentation du projetClasses Livre et Utilisateur3Propriétés de classe
Propriétés d’instance vs statiquesConstantes dans les classesMéthodes et propriétés statiquesPropriétés privées et protégéesPropriétés en lecture seule (PHP 8.1)Récapitulatif - Gestionnaire de comptes bancaires6Polymorphisme
Révision de la redéfinition des méthodesPolymorphisme via les interfacesAnnotations de type et types unionLiaison statique tardiveRécapitulatif - Processeur de paiements9Traits
Introduction aux traitsUtilisation de plusieurs traitsRésolution des conflits entre traitsMéthodes abstraites dans les traitsTraits par rapport à l’héritage12Patrons de conception – Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron StrategyEntraînez-vous par vous-même : Compilateur PHP en ligne