En este capítulo vamos a hablar de dos nuevas novedades de PHP 8, la primera de ellas se llama de la promoción de las propiedades del constructor, y la segunda tiene que ver con atributos con nombre.
Promoción de las propiedades del constructor
Nosotros en el método constructor podemos ir definiendo las distintas propiedades.
Ejm
class Humano {
public $nombre, $apellido_materno, $apellido_paterno, $dni;
public function __construct($nombre, $apellido_materno, $apellido_paterno, $dni){
$this->nombre = $nombre;
$this->apellido_materno = $apellido_materno;
$this->apellido_paterno = $apellido_paterno;
$this->dni = $dni;
}
Posteriormente, cada vez que instanciemos le tendremos que pasar al objeto los valores necesarios.
Ejm
// Creamos el objeto $humano
$humano = new Humano("Francisco", "Paredes", "Parralejo", "123456");
Hasta PHP 7 era la única forma que teníamos de hacerlo, pero con PHP 8 tenemos una nueva, y es que podemos definir las propiedades que tiene este objeto dentro del método constructor, que a la vez que lo define lo almacena, veamos su sintaxis.
Ejm
<?php
class Humano {
public function __construct(public $nombre, public $apellido_materno, public $apellido_paterno, public $dni){
}
public function setNombre($nombre){
$this->nombre = $nombre;
return $this;
}
public function setApellidos($apellido_materno, $apellido_paterno){
$this->apellido_materno = $apellido_materno;
$this->apellido_paterno = $apellido_paterno;
return $this;
}
public function setDni($dni){
$this->dni = $dni;
return $this;
}
public function imprimirDatos(){
echo "Nombre: " . $this->nombre . "<br />";
echo "Apellido materno: " . $this->apellido_materno . "<br />";
echo "Apellido paterno: " . $this->apellido_paterno . "<br />";
echo "DNI: " . $this->dni . "<br />";
}
}
// Creamos el objeto $humano
$humano = new Humano("Francisco", "Paredes", "Parralejo", "123456");
$humano->imprimirDatos();
Como podemos ver, nos estamos ahorrando lineas de código ya que no tendríamos que definir las propiedades fuera ni asignarlas una vez que lo almacenemos en una variable y luego lo almacenábamos en propiedades.
Qué valor corresponde a qué propiedad
Ahora tenemos la opción igualmente de pasar los valores en cualquier orden anteponiendo delante la propiedad y dos puntos, de la siguiente manera.
Ejm
// Creamos el objeto $humano
$humano = new Humano(nombre:"Francisco", apellido_paterno:"Paredes", apellido_materno:"Parralejo", dni: "123456");
De esta manera podemos pasar la información en un orden diferente al establecido en el método, pero se va a asignar correctamente.