Listo (Ctrl + Enter para ejecutar) Bootcamp Fullstack »
ejemplo.php
Tab = 4 espacios
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
Vista Previa
Servidor PHP 8.3