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 fondations de notre système de gestion de bibliothèque en créant les classes Book et User. Ces objets métier fondamentaux fonctionneront 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 définies via la promotion des paramètres du constructeur :isbn,titleetauthor. Incluez une propriété privée$isAvailablequi commence avec la valeurtrue. Ajoutez trois méthodes :isAvailable(): bool: renvoie l’état de disponibilitémarkAsBorrowed(): void: définit la disponibilité sur falsemarkAsReturned(): void: définit la disponibilité sur 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 des paramètres du constructeur :id(int) etname(string). Incluez un tableau privé$borrowedBooks(initialement vide) et une constanteMAX_BOOKSdéfinie à3. Ajoutez ces méthodes :getBorrowedBooks(): array: renvoie le tableau des livres empruntéscanBorrow(): bool: renvoie true si l’utilisateur a emprunté moins de MAX_BOOKS livresaddBook(Book $book): void: ajoute un livre au tableau des livres empruntésremoveBook(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 identifiant utilisateur, le nom de l’utilisateur, l’ISBN du livre et le titre du livre (l’auteur sera"Unknown").Créez un
Useret unBookavec les valeurs fournies. Affichez si l’utilisateur peut initialement emprunter un livre, puis faites-lui emprunter 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 l’intermédiaire de méthodes dédiées, et les livres empruntés par un utilisateur sont gérés grâce à un accès contrôlé. Cette base permettra de prendre en charge le système d’emprunt que nous allons construire 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 name fournis
// TODO: Créer un objet Book avec l'isbn, le title et l'author fournis
// TODO: Afficher si l'utilisateur peut emprunter initialement
// Format: "Can borrow: yes" or "Can borrow: no"
// TODO: Faire emprunter le livre par l'utilisateur :
// - 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" or "Book available: no"
// TODO: Afficher le nombre de livres empruntés
// Format: "Books borrowed: [count]"
?>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