Récapitulatif - Gestionnaire de compte bancaire
Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy — leçon 20 sur 91.
Défi
FacileConstruisons un système complet de gestion de comptes bancaires qui rassemble tous les concepts de propriétés de classe que vous avez appris dans ce chapitre. Vous allez créer une classe BankAccount qui encapsule correctement les données du compte tout en suivant les statistiques globales de la banque.
Vous organiserez votre code sur deux fichiers :
BankAccount.php— Définissez une classeBankAccountqui gère les comptes individuels et suit les statistiques globales de la banque. La classe doit inclure :- Une constante
MINIMUM_BALANCEfixée à100 - Une propriété publique en lecture seule (readonly)
string $accountIdqui ne peut pas changer après la création - Une propriété publique
$holderNamepour le nom du titulaire du compte - Une propriété privée
$balancepour protéger le solde du compte - Une propriété statique privée
$totalAccountscommençant à0 - Une propriété statique privée
$totalDepositscommençant à0
getBalance()— retourne le solde actueldeposit($amount)— ajoute au solde et met à jour le suivi des dépôts totaux, retourne le nouveau soldewithdraw($amount)— soustrait du solde uniquement si le solde restant reste supérieur ou égal à la constante de solde minimum, retourne le nouveau solde (ou le solde inchangé si le retrait n'est pas autorisé)- Une méthode statique
getTotalAccounts()— retourne le nombre total de comptes créés - Une méthode statique
getTotalDeposits()— retourne la somme de tous les dépôts effectués sur l'ensemble des comptes
- Une constante
main.php— Incluez le fichier de la classe BankAccount. Vous recevrez quatre entrées : le premier identifiant de compte, le premier nom de titulaire, le deuxième identifiant de compte et le deuxième nom de titulaire. Créez deux comptes, tous deux avec un solde initial de500. Pour le premier compte : déposez200, puis retirez100. Affichez l'identifiant du compte, le nom du titulaire et le solde sur une ligne au format :"[accountId]: [holderName] - $[balance]"Pour le deuxième compte : déposez300, puis tentez de retirer800(cela devrait échouer en raison du solde minimum). Affichez le même format pour ce compte. Enfin, affichez le nombre total de comptes et le total des dépôts sur des lignes séparées :"Total Accounts: [count]""Total Deposits: $[amount]"
Ce défi combine des propriétés en lecture seule pour les identifiants immuables, des propriétés privées avec des méthodes getter pour les données protégées, des constantes pour les règles fixes, et des propriétés statiques avec des méthodes statiques pour les statistiques globales de la banque.
Essayez vous-même
<?php
require_once 'BankAccount.php';
// Lire les entrées
$firstAccountId = trim(fgets(STDIN));
$firstHolderName = trim(fgets(STDIN));
$secondAccountId = trim(fgets(STDIN));
$secondHolderName = trim(fgets(STDIN));
// TODO: Créer le premier compte avec un solde initial de 500
// TODO: Créer le deuxième compte avec un solde initial de 500
// TODO: Premier compte : déposer 200, puis retirer 100
// TODO: Afficher les informations du premier compte : "[accountId]: [holderName] - $[balance]"
// TODO: Deuxième compte : déposer 300, puis tenter de retirer 800
// TODO: Afficher les informations du deuxième compte : "[accountId]: [holderName] - $[balance]"
// TODO: Afficher "Total Accounts: [count]"
// TODO: Afficher "Total Deposits: $[amount]"
?>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ée3Proprié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