Menu
Coddy logo textTech

Promoción del constructor (8.0)

Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy. Lección 42 de 91.

PHP 8.0 introdujo la promoción del constructor, una característica que reduce drásticamente el código repetitivo al definir clases. En lugar de declarar las propiedades por separado y luego asignarlas en el constructor, puedes hacer ambas cosas en un solo paso.

Este es el enfoque tradicional que has estado usando:

<?php
class Product {
    private string $name;
    private float $price;
    
    public function __construct(string $name, float $price) {
        $this->name = $name;
        $this->price = $price;
    }
    
    public function getInfo(): string {
        return $this->name . ": $" . $this->price;
    }
}

Con la promoción del constructor, añades el modificador de acceso directamente a los parámetros del constructor:

<?php
class Product {
    public function __construct(
        private string $name,
        private float $price
    ) {}
    
    public function getInfo(): string {
        return $this->name . ": $" . $this->price;
    }
}

$product = new Product("Laptop", 999.99);
echo $product->getInfo();

Salida:

Laptop: $999.99

Al añadir private, protected o public antes de un parámetro del constructor, PHP crea automáticamente la propiedad y asigna el valor. Puedes combinar parámetros promocionados y normales en el mismo constructor, y aún puedes añadir lógica dentro del cuerpo del constructor si es necesario.

Punto clave: La promoción de constructor elimina las declaraciones y asignaciones repetitivas de propiedades, lo que hace que tus clases sean más limpias y fáciles de leer, manteniendo al mismo tiempo el control total de la encapsulación.

challenge icon

Desafío

Fácil

Construyamos un sistema de gestión de contactos que muestre la elegancia de la promoción del constructor. Crearás una clase PHP limpia y moderna que elimina el código repetitivo y mantiene una encapsulación adecuada.

Organizarás tu código en dos archivos:

  • Contact.php: Crea una clase Contact usando la promoción del constructor para definir todas las propiedades directamente en la firma del constructor. Tu contacto debe tener:
    • Una propiedad privada $name (string)
    • Una propiedad privada $email (string)
    • Una propiedad privada $phone (string) con un valor predeterminado de "Not provided"
    Usa la sintaxis de promoción del constructor: ¡no se necesitan declaraciones de propiedades separadas! Añade un método público getFullDetails() que devuelva "[name] | [email] | [phone]". Añade también un método getSummary() que devuelva "Contact: [name]".
  • main.php: Incluye el archivo Contact. Recibirás tres entradas: un nombre, un correo electrónico y un número de teléfono. Crea dos instancias de Contact:
    • El primer contacto debe usar los tres valores (nombre, correo electrónico y teléfono)
    • El segundo contacto debe usar solo el nombre y el correo electrónico (usando el valor de teléfono predeterminado)
    Imprime cuatro líneas:
    • Los detalles completos del primer contacto
    • El resumen del primer contacto
    • Los detalles completos del segundo contacto
    • El resumen del segundo contacto

Observa cómo la promoción del constructor te permite definir propiedades, establecer su visibilidad, declarar sus tipos y asignarles valores, todo en una única firma de constructor legible. El parámetro de teléfono opcional con un valor predeterminado demuestra que los parámetros promocionados funcionan perfectamente con valores predeterminados, igual que los parámetros normales.

Pruébalo tú mismo

<?php

require_once 'Contact.php';

// Leer entrada
$name = trim(fgets(STDIN));
$email = trim(fgets(STDIN));
$phone = trim(fgets(STDIN));

// TODO: Crear el primer contacto con los tres valores (name, email, phone)

// TODO: Crear el segundo contacto solo con name y email (usar phone por defecto)

// TODO: Imprimir los detalles completos del primer contacto

// TODO: Imprimir el resumen del primer contacto

// TODO: Imprimir los detalles completos del segundo contacto

// TODO: Imprimir el resumen del segundo contacto

?>
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de PHP online