1
<?php
declare(strict_types=1);
class CuentaBancaria
{
// Propiedades privadas: Nadie puede tocarlas directamente desde fuera
private string $titular;
private float $saldo;
private string $numeroCuenta;
// Métodos públicos (La interfaz segura)
public function inicializar(string $titular, string $numeroCuenta, float $saldoInicial = 0.0): void
{
$this->titular = trim($titular);
$this->numeroCuenta = $numeroCuenta;
$this->saldo = max(0.0, $saldoInicial);
}
// Getter para leer el titular
public function getTitular(): string
{
return $this->titular;
}
// Getter para leer el saldo
public function getSaldo(): float
{
return $this->saldo;
}
// Operación de negocio con validación
public function depositar(float $monto): void
{
if ($monto <= 0) {
echo "<p style='color:red;'>⚠️ Error: El monto a depositar debe ser positivo.</p>";
return;
}
$this->saldo += $monto;
echo "<p style='color:green;'> Depósito exitoso de $" . number_format($monto, 2) . "</p>";
}
// Operación de retiro blindada contra sobregiros
public function retirar(float $monto): bool
{
if ($monto <= 0) {
echo "<p style='color:red;'>⚠️ Error: Monto inválido.</p>";
return false;
}
if ($monto > $this->saldo) {
echo "<p style='color:#dc2626; font-weight:bold;'>❌ Fondos insuficientes. Intento de retirar $" . number_format($monto, 2) . " con saldo disponible de $" . number_format($this->saldo, 2) . "</p>";
return false;
}
$this->saldo -= $monto;
echo "<p style='color:#16a34a;'> Retiro de $" . number_format($monto, 2) . " aprobado. Nuevo saldo: $" . number_format($this->saldo, 2) . "</p>";
return true;
}
}
// ==========================================
// PRUEBA DEL ENCAPSULAMIENTO
// ==========================================
$miCuenta = new CuentaBancaria();
$miCuenta->inicializar("Mariana Velásquez", "ES91-2100-0418", 1000.00);
echo "<h2>Cuenta de: " . htmlspecialchars($miCuenta->getTitular()) . "</h2>";
echo "<p>Saldo inicial: $" . number_format($miCuenta->getSaldo(), 2) . "</p>";
// Transacciones
$miCuenta->depositar(350.00);
$miCuenta->retirar(400.00);
$miCuenta->retirar(2000.00); // Intento fallido bloqueado por la lógica de negocio
echo "<h3>Saldo Final Protegido: $" . number_format($miCuenta->getSaldo(), 2) . "</h3>";
Haz clic para editar este código