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.
<?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:
<?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):
<?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:
<?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.
- Eliminar los
-
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.