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.
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:
class nombre_clase {
public function __construct() {
// Acciones a realizar cuando se crea el objeto
}
}
Parámetros en el constructor
Si lo necesitamos, podemos establecer parámetros en la función del constructor:
class nombre_clase {
public function __construct($parametro1,$parametro2) {
// Acciones a realizar cuando se crea el objeto
}
}
En tal caso, es necesario indicarlos en el momento de la creación del objeto:
$nombre_objeto = new nombre_clase($valor1,$valor2);
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.
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:
class nombre_clase {
public function __destruct() {
// Acciones a realizar cuando se destruye el objeto
}
}
Cuándo se ejecuta un destructor de clase
Si no lo hemos hecho de manera explícita utilizando la función unset, el destructor se ejecutará cuando finalice el script de PHP.Vamos a ver un ejemplo completo:
<?php
include('librerias/conexion_bbdd.php');
$empleado1 = new empleado(3457);
$nuevo_salario = $empleado1 -> get_salario() * 1.10;
$empleado1 -> set_salario($nuevo_salario);
$nuevo_salario = $empleado1 -> get_salario() * 1.10;
$empleado1 -> set_salario($nuevo_salario);
class empleado {
private $salario;
private $salario_inicial;
private $id;
public function __construct($numero_empleado) {
$sql = "SELECT salario FROM empleados WHERE id = $numero_empleado";
$datos = $GLOBALS['conexion'] -> query($sql);
$this -> salario = $datos[0]['salario'];
$this -> salario_inicial = $this -> salario;
$this -> $id = $numero_empleado;
}
public function __destruct() {
if ($this -> salario_inicial != $this -> salario) {
$sql = 'UPDATE empleados ';
$sql .= 'SET salario = ' . $this -> salario . ' ';
$sql .= 'WHERE id = ' . $this -> $id;
$GLOBALS['conexion'] -> query($sql);
}
}
public function set_salario($valor) {
$this -> salario = $valor;
}
public function get_salario() {
return $this -> salario;
}
}
?>
Observa que al realizar el guardado del salario en la base de datos con el destructor, en vez de hacerlo dentro del método set_salario, 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 $GLOBALS['conexion'] que realiza todas las peticiones a la base de datos.
Esta píldora formativa está extraída del Curso online de Programación en PHP avanzada.
No pierdas tu oportunidad y ¡continúa aprendiendo!
Política de privacidad
ADR Formación utiliza cookies propias y de terceros para fines analíticos anónimos, guardar las preferencias que selecciones y para el funcionamiento general de la página.
Puedes aceptar todas las cookies pulsando el botón "Aceptar" o configurarlas o rechazar su uso pulsando el botón "Configurar".
Puedes obtener más información y volver a configurar tus preferencias en cualquier momento en la Política de cookies