Classes Livre et Utilisateur
Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy — leçon 83 sur 91.
Défi
FacileConstruisons les bases de notre système de gestion de bibliothèque en créant les classes Book et User. Ces objets de domaine centraux travailleront ensemble pour gérer les opérations de la bibliothèque.
Vous organiserez votre code sur trois fichiers :
Book.php— Créez une classeBookqui suit les livres de la bibliothèque. Votre livre doit avoir trois propriétés en lecture seule (readonly) définies via la promotion de constructeur :isbn,title, etauthor. Incluez une propriété privée$isAvailablequi commence àtrue. Ajoutez trois méthodes :isAvailable(): bool— retourne le statut de disponibilitémarkAsBorrowed(): void— définit la disponibilité à falsemarkAsReturned(): void— définit la disponibilité à true
User.php— Incluez le fichier Book et créez une classeUserreprésentant les membres de la bibliothèque. Votre utilisateur doit avoir deux propriétés en lecture seule via la promotion de constructeur :id(int) etname(string). Incluez un tableau privé$borrowedBooks(initialement vide) et une constanteMAX_BOOKSfixée à3. Ajoutez ces méthodes :getBorrowedBooks(): array— retourne le tableau des livres empruntéscanBorrow(): bool— retourne true si l'utilisateur a moins de MAX_BOOKS empruntésaddBook(Book $book): void— ajoute un livre au tableau des empruntsremoveBook(string $isbn): void— supprime un livre par ISBN en utilisantarray_filter
main.php— Incluez le fichier User et donnez vie à vos classes. Vous recevrez quatre entrées : un ID utilisateur, un nom d'utilisateur, un ISBN de livre et un titre de livre (l'auteur sera"Unknown").Créez un
Useret unBookavec les valeurs fournies. Affichez si l'utilisateur peut emprunter initialement, puis faites en sorte que l'utilisateur emprunte le livre (marquez-le comme emprunté et ajoutez-le à l'utilisateur). Enfin, affichez la disponibilité du livre et le nombre de livres empruntés.Format de sortie :
Can borrow: [yes/no] Book available: [yes/no] Books borrowed: [count]
Remarquez comment l'encapsulation protège l'état interne — la disponibilité d'un livre ne change que par des méthodes dédiées, et les livres empruntés d'un utilisateur sont gérés par un accès contrôlé. Cette base soutiendra le système d'emprunt que nous construirons ensuite.
Essayez vous-même
<?php
require_once 'User.php';
// Lire les entrées
$userId = intval(trim(fgets(STDIN)));
$userName = trim(fgets(STDIN));
$bookIsbn = trim(fgets(STDIN));
$bookTitle = trim(fgets(STDIN));
$bookAuthor = "Unknown";
// TODO: Créer un objet User avec l'id et le nom fournis
// TODO: Créer un objet Book avec l'isbn, le titre et l'auteur fournis
// TODO: Afficher si l'utilisateur peut emprunter initialement
// Format: "Can borrow: yes" ou "Can borrow: no"
// TODO: Faire en sorte que l'utilisateur emprunte le livre :
// - Marquer le livre comme emprunté
// - Ajouter le livre aux livres empruntés de l'utilisateur
// TODO: Afficher la disponibilité du livre
// Format: "Book available: yes" ou "Book available: no"
// TODO: Afficher le nombre de livres empruntés
// Format: "Books borrowed: [count]"
?>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