Tema 13

Constructores y Promoción de Propiedades en PHP 8

Aprende a inicializar objetos automáticamente con el constructor y a simplificar tus clases con la moderna promoción de propiedades de PHP 8.

¿Qué es el Constructor en PHP?

El constructor __construct() es un método mágico que PHP invoca de forma automática en el instante exacto en que se crea un objeto con la palabra new. Permite inicializar propiedades obligatorias y dejar el objeto en un estado consistente.

La Revolución de PHP 8: Constructor Property Promotion

Antes de PHP 8, definir una clase sencilla requería escribir el nombre de cada propiedad cuatro veces (declaración, parámetro, tipo y asignación en $this).

Comparativa de Código:

Antes de PHP 8 (Código Verboso) PHP 8+ (Constructor Property Promotion)
class Producto {
    public string $nombre;
    public float $precio;

    public function __construct(string $nombre, float $precio) {
        $this->nombre = $nombre;
        $this->precio = $precio;
    }
}
class Producto {
    public function __construct(
        public string $nombre,
        public float $precio,
        public int $stock = 0
    ) {}
}

Al anteponer un modificador de visibilidad (public, protected o private) en los parámetros del constructor, PHP declara la propiedad y le asigna el valor recibido automáticamente.

⚡ Ejemplo de Constructor Moderno en PHP 8.3

Construye un modelo de Cuaderno Interactivo con valores por defecto e inicialización automática:

index.html
Solo lectura
<!DOCTYPE html>
<html>
<body>

<h2>Constructor Property Promotion (PHP 8.3)</h2>

<?php
class CuadernoInteractivo {
    // Definición compacta y moderna: PHP crea las propiedades automáticamente
    public function __construct(
        public string $titulo,
        public string $slug,
        public int $totalSpreads = 25,
        public string $colorAcento = "#2563eb",
        public bool $esPublico = true
    ) {}

    public function renderTarjeta(): string {
        $estado = $this->esPublico 
            ? "<span style='color:#10b981; font-weight:bold;'>✓ Disponible</span>" 
            : "<span style='color:#ef4444; font-weight:bold;'>🔒 Requiere Matrícula</span>";

        return "
        <div style='border:1px solid #cbd5e1; border-left: 6px solid {$this->colorAcento}; border-radius: 6px; padding: 12px 16px; margin-bottom: 12px; background:#ffffff;'>
            <h3 style='margin:0 0 4px 0;'>{$this->titulo}</h3>
            <p style='margin:0 0 6px 0; color:#64748b; font-size:0.85rem;'>Ruta: <code>/cuadernos/{$this->slug}/</code></p>
            <p style='margin:0; font-size:0.9rem;'>
                Capítulos: <strong>{$this->totalSpreads} spreads</strong> &middot; Acceso: {$estado}
            </p>
        </div>";
    }
}

// 1. Instanciación posicional tradicional
$cuaderno1 = new CuadernoInteractivo(
    "Proyecto Fullstack: JS, PHP & MySQL",
    "proyecto-fullstack",
    25,
    "#059669",
    true
);

// 2. Instanciación con Argumentos con Nombre (Named Arguments de PHP 8)
$cuaderno2 = new CuadernoInteractivo(
    titulo: "PHP & MySQL con Seguridad y PDO",
    slug: "php-mysql-seguro",
    colorAcento: "#7c3aed",
    esPublico: false
    // 'totalSpreads' toma su valor por defecto: 25
);

echo $cuaderno1->renderTarjeta();
echo $cuaderno2->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.