Saltar a contenido

El Constructor

El constructor de los objetos se define mediante el método mágico __construct. Este puede o no tener parámetros, pero sólo puede haber un único constructor.

Persona.php
<?php
class Persona {
    private string $nombre;

    public function __construct(string $nom) {
        $this->nombre = $nom;
    }

    public function imprimir(){
      echo $this->nombre;
      echo '<br>';
    }
}

$gines = new Persona("Ginés López");
$gines->imprimir();

Constructores en PHP 8

Una de las grandes novedades que ofrece PHP 8 es la simplificación de los constructores con parámetros, lo que se conoce como promoción de propiedades del constructor.

En lugar de tener que declarar las propiedades como privadas o protegidas y luego asignar los parámetros a estas propiedades dentro del constructor, el propio constructor ahora promociona las propiedades.

Veámoslo mejor con un ejemplo. Imaginemos una clase Punto donde queramos almacenar sus coordenadas:

Punto.php
<?php
class Punto {
    protected float $x;
    protected float $y;
    protected float $z;

    public function __construct(
        float $x = 0.0,
        float $y = 0.0,
        float $z = 0.0
    ) {
        $this->x = $x;
        $this->y = $y;
        $this->z = $z;
    }
}

En PHP 8, esto quedaría del siguiente modo (mucho más corto, lo que facilita su legibilidad):

Punto.php
<?php
class Punto {
    public function __construct(
        protected float $x = 0.0,
        protected float $y = 0.0,
        protected float $z = 0.0,
    ) {}
}

El orden importa

Al codificar, el orden de los elementos debe ser:

NombreClase.php
<?php
declare(strict_types=1);

class NombreClase {
    // propiedades

    // constructor

    // getters - setters

    // resto de métodos
}

Actividades

  • 📝 AC 303. (RA3 / CE3b CE3d / IC1 / 3p) - Se solicita realiazar una copia de la clase del ejercicio AC302 y realizar una serie de modificaciones:

    • Eliminar los setters de nombre y apellidos, de manera que dichos datos se asignan mediante el constructor (se recomienda el uso de la sintaxis de PHP7).
    • Si el constructor recibe un tercer parámetro, será el sueldo del Empleado. Si no, se le asignará 1000€ como sueldo inicial.
  • 🔬 AP 304. (RA3 / CE3b CE3c CE3d CE3g / IC1 / 3p) - Se necesita realizar una modificación más en la clase de la actividad anterior AC303, es necesario utilizar la sintaxis de PHP 8 de promoción de las propiedades del constructor.