Constructores y destructores en PHP

Un objeto debe tener sentido en cualquier momento de su ciclo de vida. Esto quiere decir que, desde el momento que se crea, sus propiedades deben tener un valor que sea coherente.

Es muy frecuente, que necesitemos realizar una serie de cálculos en el momento de la creación del objeto, para asignar los valores iniciales de sus propiedades.

En nuestra clase empleado, no tiene sentido que un trabajador comience con su propiedad salario sin establecer.

En el momento de la creación del objeto empleado, nos conectaremos a la base de datos, para recuperar cuál es su sueldo y establecer el valor correspondiente de la propiedad salario. 

Constructores

Para realizar estos procesos iniciales, tenemos los constructores de clase, que se ejecutan en el momento de la creación del objeto. Su sintaxis es la siguiente:

Parámetros en el constructor

Si lo necesitamos, podemos establecer parámetros en la función del constructor:

En tal caso, es necesario indicarlos en el momento de la creación del objeto:

Es obligatorio indicar el mismo número de parámetros que hemos establecido en el constructor de la clase a la hora de crear el objeto. No obstante, como sucede con cualquier función de PHP podemos establecer parámetros opcionales en el constructor.

Destructores

Del mismo modo que existen constructores de clase, existen destructores de clase, que se ejecutan cuando el objeto es destruido. Suelen utilizarse para realizar operaciones y guardados finales. Su sintaxis es la siguiente:

Cuándo se ejecuta un destructor de clase

Si no lo hemos hecho de manera explícita utilizando la función unsetLa función unset, destruye una variable. Su sintaxis es: unset($variable);, el destructor se ejecutará cuando finalice el script de PHP. 

Vamos a ver un ejemplo completo:

Tenemos el siguiente código PHP:

Al llamarlo desde el navegador se producen las siguientes acciones:
  • Se crea el objeto a partir de su número de empleado (3457) y se ejecuta el constructor que realiza las siguientes acciones:
    • Recupera el sueldo del empleado 3457 de la base de datos y lo almacena en la propiedad .
    • También almacena el sueldo en la propiedad para conocer cuál era el salario del empleado cuando se creó el objeto.
    • Guarda el número de empleado en la propiedad .
  • Se recupera el salario de con el método , se sube un 10% y se almacena de nuevo en el objeto con el método .
  • Volvemos a realizar el paso anterior, incrementando otro 10% el salario del trabajador.
  • El script finaliza, ejecutando el destructor del objeto que realiza las siguientes acciones:
    • Comprueba si el salario del empleado se ha modificado durante la vida del objeto.
    • En caso de haberse modificado, guarda el nuevo salario en la base de datos.

Observa que al realizar el guardado del salario en la base de datos con el destructor, en vez de hacerlo dentro del método , hemos evitado actualizar dos veces el mismo dato innecesariamente. De esta forma aumentamos la eficiencia del script.

NOTA: Para este ejemplo hemos utilizado un objeto almacenado en   que realiza todas las peticiones a la base de datos.