Vamos a ver qué es un constructor y para que sirven, además de un sencillo ejemplo de una clase que define un constructor. En este artículo se aborda el uso de constructores desde PHP 5 a PHP 8 y en adelante.
Los constructores son unos métodos especiales de las clases que sirven para implementar las tareas de inicialización en el momento de instanciación de los objetos. No solamente existen en PHP, sino en toda la programación orientada a objetos en general. En este artículo veremos cómo declarar constructores en las clases de PHP.
Qué es un constructor
Los constructores se encargan de resumir las acciones de inicialización de los objetos. Cuando se instancia un objeto, se tienen que realizar varios pasos en su inicialización, por ejemplo dar valores a sus atributos y eso es de lo que se encarga el constructor.
Es importante quedarse con el concepto de "inicialización", ya que los constructores en realidad no son los que construyen los objetos. Solamente tienen el código que debe ejecutarse cuando el objeto se acaba de construir y antes de que esté disponible para hacer cosas con él.
Para facilitar el trabajo de los constructores y personalizar su funcionamiento pueden recibir unos datos, mediante parámetros en el método constructor. Esos datos los podremos usar para inicializar los objetos como se desee en cada caso.
Cómo se declara un constructor en PHP
En este artículo vamos a ver la sintaxis para la creación de constructor que se definió a partir de PHP 5 y que está vigente hasta la actualidad. Es bien sencillo, simplemente es una función definida en la clase que debe tener nombre fijo: __construct()
(hay dos guiones bajos antes de la palabra "construct").
En las versiones de PHP 3 y PHP 4 los constructores se nombraban con el mismo nombre de la clase. Hoy no existe esta posibilidad. Si lees un artículo que te indica crear el constructor con el mismo nombre de la clase es que estás leyendo un texto referente a una versión antigua de PHP.
Este es un ejemplo de constructor en PHP:
class MiClase {
public function __construct() {
// realizar las tareas de inicialización del objeto
}
}
Los construtores suelen definirse como "
public
" porque si fueran "private
" nadie podría crear objetos de la clase, desde fuera del código de la propia clase. Si no indicas ninguna visibilidad en el constructor se entiende que se ha definido como "public
".
Ejemplo de clase con su constructor
A lo largo de los ejemplos de este manual vamos a ir creando un código para gestión de un videoclub. Vamos a empezar definiendo una clase cliente, que utilizaremos luego en nuestro programa.
class Cliente {
public $nombre;
public $numero;
public $peliculas_alquiladas;
function __construct($nombre, $numero){
$this->nombre=$nombre;
$this->numero=$numero;
$this->peliculas_alquiladas = [];
}
function dameNumero(){
return $this->numero;
}
}
El constructor en esta clase recibe el nombre y número que asignar al cliente, que introduce luego en sus correspondientes propiedades. Además inicializa el atributo películas_alquiladas como un array, en este caso vacío porque todavía no tiene ninguna película en su poder.
$this
hace referencia al objeto sobre el que se está ejecutando el método. En este caso, como se trata de un constructor, $this
hace referencia al objeto que se está construyendo. Con $this->nombre = $nombre;
estamos asignando al atributo nombre del objeto que se está construyendo el valor que contiene la variable $nombre, que se ha recibido por parámetro. Luego hemos creado un método muy sencillo para poder utilizar el objeto. Vamos a ver unas acciones simples para ilustrar el proceso de instanciación y utilización de los objetos.
//instanciamos un par de objetos cliente
$cliente1 = new Cliente("Pepe", 1);
$cliente2 = new Cliente("Roberto", 564);
// mostramos el numero de cada cliente creado
echo "El identificador del cliente 1 es: " . $cliente1->dame_numero();
echo "El identificador del cliente 2 es: " . $cliente2->dame_numero();
Este ejemplo obtendría esta salida como resultado de su ejecución:
El identificador del cliente 1 es: 1
El identificador del cliente 2 es: 564
Errores comunes en el uso de constructores en PHP
Ahora vamos a enumerar una serie de errores comunes que pueden cometer los desarrolladores cuando usan constructores en PHP.
Utilizar el nombre antiguo del constructor: Antes de PHP 5.3.3, los constructores se nombraban con el mismo nombre que la clase. Aunque esto todavía funciona en algunas versiones de PHP posteriores (simplemente por razones de retrocompatibilidad), es considerado obsoleto y puede generar confusión o no funcionar en el futuro. Es preferible siempre usar __construct()
.
Pensar que los constructores deben devolver un valor: A diferencia de otros métodos en PHP, los constructores no pueden devolver un valor. Esto es así diría que en todos los lenguajes.
Abusar de la lógica en el constructor: Los constructores deben ser sencillos o sería aconsejable. Si hay mucha lógica en la construcción de los objetos es preferible organizarse de alguna manera en vez de hacer un método muy largo.
Constructores deberían ser públicos: Si no, no será posible construir objetos. Existe un patrón de diseño de software llamado Singleton que justamente requiere que el constructor sea privado para asegurar que solo pueda existir una instancia de la clase. Excepto casos señalados como ese siempre serán public
.
Asignación incorrecta de propiedades: Un error común es escribir mal el nombre de una propiedad o no usar adecuadamente $this
para referirse a las propiedades del objeto que se está construyendo.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...