Normalmente cuando hacemos uso de las clases seguimos la siguiente sintaxis.
Ejm
<?php
class Humano {
public $nombre, $apellido_materno, $apellido_paterno, $dni;
public function setNombre($nombre){
$this->nombre = $nombre;
}
public function setApellidos($apellido_materno, $apellido_paterno){
$this->apellido_materno = $apellido_materno;
$this->apellido_paterno = $apellido_paterno;
}
public function setDni($dni){
$this->dni = $dni;
}
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 />";
}
}
$humano = new Humano;
$humano->setNombre("Francisco");
$humano->setApellidos("Paredes", "Parralejo");
$humano->setDni("dni");
$humano->imprimirDatos();
Pero hay que darse cuenta cuantas veces hemos hecho referencia al objeto $humano. Sería mucho más práctico si llamásemos una única vez al objeto $humano y luego ir pasándole los distintos métodos (setNombre, setApellidos...). De hecho si se ha trabajado con algunos frameworks como Laravel, se llama una sóla vez al objeto y luego se van concatenando los distintos métodos que se van utilizando.
Para lograr ésto, todos los métodos que no devuelvan valor los vamos a hacer que devuelvan un valor, que va a ser el mismo objeto, para lo cual vamos a escribir la sintaxis dentro de la función return $this; de la siguiente manera.
Una vez que ejecutemos el método setNombre(), el objeto vuelve a ser $humano, por lo cual ya no necesitamos llamar nuevamente al objeto humano si queremos ejecutar otro método como setApellidos().
Ejm
<?php
class Humano {
public $nombre, $apellido_materno, $apellido_paterno, $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;
// Concateno los distintos sets
$humano->setNombre("Francisco")
->setApellidos("Paredes", "Parralejo")
->setDni("dni")
->imprimirDatos();
Hacer esto se ve mucho más limpio y vamos a tener el código mucho más organizado.