Tema 12

Clases y Objetos en PHP

Aprende los fundamentos de la Programación Orientada a Objetos en PHP: definición de clases, instanciación con new, propiedades, métodos y $this.

¿Qué es la Programación Orientada a Objetos?

La Programación Orientada a Objetos (POO) organiza el código en torno a entidades del mundo real (como usuarios, cursos o facturas). Cada entidad combina su estado (propiedades) y su comportamiento (métodos).

Conceptos Clave:

  • Clase: El molde o plano que define las propiedades y métodos comunes.
  • Objeto (Instancia): Una copia concreta creada en memoria a partir de la clase usando la palabra reservada new.
  • Propiedades: Variables que pertenecen a la clase.
  • Métodos: Funciones declaradas dentro de la clase que definen lo que el objeto puede hacer.
  • $this: Pseudovariable que hace referencia al objeto actual dentro de sus propios métodos.

Sintaxis Básica de una Clase:

class Curso {
    public string $titulo;
    public int $horas;

    public function obtenerFicha(): string {
        return "{$this->titulo} ({$this->horas} horas de estudio)";
    }
}

// Creación de un objeto
$miCurso = new Curso();
$miCurso->titulo = "PHP 8.3 & MySQL";
$miCurso->horas = 40;
echo $miCurso->obtenerFicha();

⚡ Ejemplo de Clase y Creación de Objetos

Modela un Estudiante de Kilopolis con propiedades, métodos de cálculo y presentación de progreso:

index.html
Solo lectura
<!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 = "Juan Felipe Gutiérrez";
$alumno1->especialidad = "Desarrollo Backend PHP";
$alumno1->completarClase(16);

$alumno2 = new Estudiante();
$alumno2->nombre = "Paula López";
$alumno2->especialidad = "Fullstack Developer";
$alumno2->completarClase(7);

// Renderizamos ambas tarjetas
echo $alumno1->renderTarjeta();
echo $alumno2->renderTarjeta();
?>

</body>
</html>
Pruébalo tú mismo » Se abre en una nueva pestaña con ejecución en vivo
🦉
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.

🚀 ¿Quieres dominar Manual Completo de PHP y crear proyectos reales?

Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.

🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.