1
<!DOCTYPE html>
<html>
<body>
<h2>POO en PHP 8.3: Clases y Objetos</h2>
<?php
class Estudiante {
// 1. Declaración de propiedades con tipos estrictos
public string $nombre;
public string $especialidad;
public int $clasesCompletadas = 0;
public int $totalClases = 20;
// 2. Método para avanzar progreso
public function completarClase(int $cantidad = 1): void {
$this->clasesCompletadas = min($this->totalClases, $this->clasesCompletadas + $cantidad);
}
// 3. Método para calcular porcentaje
public function porcentajeProgreso(): float {
return round(($this->clasesCompletadas / $this->totalClases) * 100, 1);
}
// 4. Método que genera una tarjeta de presentación HTML
public function renderTarjeta(): string {
$pct = $this->porcentajeProgreso();
$color = $pct >= 80 ? "#10b981" : ($pct >= 40 ? "#2563eb" : "#f59e0b");
return "
<div style='background:#f8fafc; border:1px solid #e2e8f0; border-radius:8px; padding:16px; max-width:420px; margin-bottom:12px;'>
<h3 style='margin:0 0 6px 0; color:#0f172a;'>🎓 {$this->nombre}</h3>
<p style='margin:0 0 10px 0; color:#64748b; font-size:0.9rem;'>Especialidad: <strong>{$this->especialidad}</strong></p>
<div style='background:#e2e8f0; border-radius:10px; height:12px; overflow:hidden;'>
<div style='background:{$color}; width:{$pct}%; height:100%; transition: width 0.3s;'></div>
</div>
<p style='margin:6px 0 0 0; font-size:0.85rem; color:#334155;'>
Progreso: <strong>{$this->clasesCompletadas} de {$this->totalClases} clases ({$pct}%)</strong>
</p>
</div>";
}
}
// 5. Instanciación y uso de objetos
$alumno1 = new Estudiante();
$alumno1->nombre = "Andrés Vargas";
$alumno1->especialidad = "Desarrollo Backend PHP";
$alumno1->completarClase(16);
$alumno2 = new Estudiante();
$alumno2->nombre = "Alejandro Díaz";
$alumno2->especialidad = "Fullstack Developer";
$alumno2->completarClase(7);
// Renderizamos ambas tarjetas
echo $alumno1->renderTarjeta();
echo $alumno2->renderTarjeta();
?>
</body>
</html>
Haz clic para editar este código