Resumen - Gestor de cuenta bancaria
Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy — lección 20 de 91.
Desafío
FácilVamos a construir un sistema completo de gestión de cuentas bancarias que reúna todos los conceptos de propiedades de clase que has aprendido en este capítulo. Crearás una clase BankAccount que encapsule adecuadamente los datos de la cuenta mientras realiza un seguimiento de las estadísticas globales del banco.
Organizarás tu código en dos archivos:
BankAccount.php— Define una claseBankAccountque gestione cuentas individuales y realice un seguimiento de las estadísticas generales del banco. La clase debe incluir:- Una constante
MINIMUM_BALANCEestablecida en100 - Una propiedad pública de solo lectura (readonly)
string $accountIdque no pueda cambiar después de su creación - Una propiedad pública
$holderNamepara el nombre del titular de la cuenta - Una propiedad privada
$balancepara proteger el saldo de la cuenta - Una propiedad estática privada
$totalAccountsque comience en0 - Una propiedad estática privada
$totalDepositsque comience en0
getBalance()— devuelve el saldo actualdeposit($amount)— añade al saldo y actualiza el rastreador de depósitos totales, devuelve el nuevo saldowithdraw($amount)— resta del saldo solo si el saldo restante se mantiene igual o por encima de la constante de saldo mínimo, devuelve el nuevo saldo (o el saldo sin cambios si el retiro no está permitido)- Un método estático
getTotalAccounts()— devuelve el número total de cuentas creadas - Un método estático
getTotalDeposits()— devuelve la suma de todos los depósitos realizados en todas las cuentas
- Una constante
main.php— Incluye el archivo de la clase BankAccount. Recibirás cuatro entradas: el ID de la primera cuenta, el nombre del primer titular, el ID de la segunda cuenta y el nombre del segundo titular. Crea dos cuentas, ambas con un saldo inicial de500. Para la primera cuenta: deposita200, luego retira100. Imprime el ID de la cuenta, el nombre del titular y el saldo en una línea con el formato:"[accountId]: [holderName] - $[balance]"Para la segunda cuenta: deposita300, luego intenta retirar800(esto debería fallar debido al saldo mínimo). Imprime el mismo formato para esta cuenta. Finalmente, imprime el total de cuentas y el total de depósitos en líneas separadas:"Total Accounts: [count]""Total Deposits: $[amount]"
Este desafío combina propiedades readonly para identificadores inmutables, propiedades privadas con métodos getter para datos protegidos, constantes para reglas fijas y propiedades estáticas con métodos estáticos para estadísticas globales del banco.
Pruébalo tú mismo
<?php
require_once 'BankAccount.php';
// Leer entradas
$firstAccountId = trim(fgets(STDIN));
$firstHolderName = trim(fgets(STDIN));
$secondAccountId = trim(fgets(STDIN));
$secondHolderName = trim(fgets(STDIN));
// TODO: Crear la primera cuenta con un saldo inicial de 500
// TODO: Crear la segunda cuenta con un saldo inicial de 500
// TODO: Primera cuenta: depositar 200, luego retirar 100
// TODO: Imprimir información de la primera cuenta: "[accountId]: [holderName] - $[balance]"
// TODO: Segunda cuenta: depositar 300, luego intentar retirar 800
// TODO: Imprimir información de la segunda cuenta: "[accountId]: [holderName] - $[balance]"
// TODO: Imprimir "Total Accounts: [count]"
// TODO: Imprimir "Total Deposits: $[amount]"
?>Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de OOP
Archivos externosIntroducción a OOPClases vs ObjetosLa palabra clave $thisMétodosPropiedadesConstructor (__construct)Destructor (__destruct)Resumen - Calculadora simple4Herencia
Herencia básicaLa palabra clave parent::Sobrescritura de métodosLa palabra clave finalClases abstractasResumen - Jerarquía de empleados7Encapsulamiento
Público, Protegido, PrivadoModificadores de acceso a fondoGetters y SettersOcultamiento de informaciónPromoción de constructor (8.0)Resumen - Sistema de registros de estudiantes10Conceptos avanzados de POO
Composición vs. HerenciaInyección de dependenciasClases anónimasEnums (PHP 8.1)Fibers (PHP 8.1)Clonación de objetos a fondoGeneradores e Iteradores13Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón Repository2Espacios de nombres y Autoloading
Introducción a los espacios de nombresLa palabra clave useEstándar de Autoloading PSR-4Autoloader de ComposerResumen - Proyecto organizado5Interfaces y Contratos
Introducción a las InterfacesImplementación de InterfacesImplementación de Múltiples InterfacesInterfaz vs Clase AbstractaType Hinting con InterfacesResumen - Calculadora de Formas8Métodos mágicos
Introducción a los métodos mágicos__toString y __debugInfo__get, __set, __isset, __unset__call y __callStatic__clone y clonación de objetos__serialize y __unserializeResumen - Colección personalizada3Propiedades de clase
Propiedades de instancia vs. estáticasConstantes en clasesMétodos y propiedades estáticosPropiedades privadas y protegidasPropiedades de solo lectura (PHP 8.1)Resumen - Gestor de cuenta bancaria6Polimorfismo
Sobrescritura de métodos revisadaPolimorfismo mediante interfacesType Hinting y tipos de uniónEnlace estático tardíoResumen - Procesador de pagos9Traits
Introducción a los TraitsUso de múltiples TraitsResolución de conflictos de TraitsMétodos abstractos en TraitsTraits frente a herencia12Patrones de diseño Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón Strategy