Volver
Ctrl+Space
◑
Copiar
Descargar
Restaurar
Ejecutar
Ctrl+Enter
<?php // POO en PHP - Ejemplo 2: Visibilidad y encapsulamiento // ======================================================= // private → solo accesible dentro de la clase // protected → accesible en la clase y sus hijas // public → accesible desde cualquier lugar class CuentaBancaria { private float $saldo; private array $historial = []; public string $titular; public function __construct(string $titular, float $saldoInicial = 0) { $this->titular = $titular; $this->saldo = $saldoInicial; $this->registrar("Apertura con $" . $saldoInicial); } public function depositar(float $monto): void { if ($monto <= 0) { echo "✗ El monto debe ser positivo.\n"; return; } $this->saldo += $monto; $this->registrar("Depósito: +$" . $monto); echo "✓ Depósito de $" . $monto . " realizado.\n"; } public function extraer(float $monto): bool { if ($monto <= 0) { echo "✗ El monto debe ser positivo.\n"; return false; } if ($monto > $this->saldo) { echo "✗ Saldo insuficiente. Saldo actual: $" . $this->saldo . "\n"; return false; } $this->saldo -= $monto; $this->registrar("Extracción: -$" . $monto); echo "✓ Extracción de $" . $monto . " realizada.\n"; return true; } public function transferir(CuentaBancaria $destino, float $monto): bool { if ($monto <= 0 || $monto > $this->saldo) { echo "✗ No se puede transferir $" . $monto . " a " . $destino->titular . "\n"; return false; } $this->saldo -= $monto; $destino->saldo += $monto; // accede al private de OTRA instancia de la misma clase — permitido $this->registrar("Transferencia a " . $destino->titular . ": -$" . $monto); $destino->registrar("Transferencia de " . $this->titular . ": +$" . $monto); echo "✓ Transferencia de $" . $monto . " a " . $destino->titular . " realizada.\n"; return true; } // Getter — expone el saldo de solo lectura public function getSaldo(): float { return $this->saldo; } // Método privado — solo lo usa la clase internamente private function registrar(string $movimiento): void { $this->historial[] = $movimiento; } public function verHistorial(): void { echo "\n--- Historial de " . $this->titular . " ---\n"; foreach ($this->historial as $i => $mov) { echo " " . ($i + 1) . ". " . $mov . "\n"; } echo " Saldo actual: $" . $this->saldo . "\n"; } } // ── Uso ───────────────────────────────────────────────────────────────── echo "=== Creando cuentas ===\n"; $cuentaAna = new CuentaBancaria("Ana García", 1000); $cuentaCarlos = new CuentaBancaria("Carlos López", 500); echo "\n=== Operaciones de Ana ===\n"; $cuentaAna->depositar(500); $cuentaAna->depositar(200); $cuentaAna->extraer(300); $cuentaAna->extraer(2000); // saldo insuficiente $cuentaAna->depositar(-50); // monto inválido echo "\n=== Transferencia ===\n"; $cuentaAna->transferir($cuentaCarlos, 400); $cuentaAna->transferir($cuentaCarlos, 9999); // no alcanza echo "\n=== Saldos finales ===\n"; echo "Ana : $" . $cuentaAna->getSaldo() . "\n"; echo "Carlos : $" . $cuentaCarlos->getSaldo() . "\n"; $cuentaAna->verHistorial(); $cuentaCarlos->verHistorial(); echo "\n=== Encapsulamiento ===\n"; echo "Titular (public) : " . $cuentaAna->titular . "\n"; echo "El saldo no se puede modificar directamente desde afuera (private).\n"; echo "Solo se puede leer con getSaldo() y modificar con depositar()/extraer().\n"; ?>