Constructores Y Destructores
Constructores y destructores
Constructor y destructor
El destructor en PHP se utiliza para realizar acciones específicas justo antes de que un objeto sea destruido. A diferencia del constructor, que se ejecuta cuando se crea un objeto, el destructor se llama automáticamente cuando el objeto ya no es referenciado en el código o cuando se llama explícitamente a la función unset() para eliminar la última referencia al objeto, o al final del script.
<?php
class Persona {
public $nombre;
public $edad;
// Constructor
public function __construct($nombre, $edad) {
$this->nombre = $nombre;
$this->edad = $edad;
}
// Destructor
public function __destruct() {
echo "Objeto destruido.\n";
}
}
// Crear un objeto utilizando el constructor
$persona2 = new Persona("Maria", 25);
?>
IMPORTANTE: En php no existe la sobrecarga de constructores por lo que solo podemos definir uno. Podemos conseguir una funcionalidad similar a la sobrecarga de constructores usando parámetros por defecto
class MiClase {
private $nombre;
private $edad;
// Constructor con valores predeterminados
public function __construct($nombre = "John Doe", $edad = 25) {
$this->nombre = $nombre;
$this->edad = $edad;
}
public function obtenerNombre() {
return $this->nombre;
}
public function obtenerEdad() {
return $this->edad;
}
}
// Crear instancias con diferentes combinaciones de parámetros
$instancia1 = new MiClase(); // Utiliza valores predeterminados
$instancia2 = new MiClase("Jane Smith"); // Especifica solo el nombre
$instancia3 = new MiClase("Bob", 30); // Especifica ambos valores
echo $instancia1->obtenerNombre(); // John Doe
echo $instancia1->obtenerEdad(); // 25
echo $instancia2->obtenerNombre(); // Jane Smith
echo $instancia2->obtenerEdad(); // 25
echo $instancia3->obtenerNombre(); // Bob
echo $instancia3->obtenerEdad(); // 30
Constructor property promotion
En vez de definir el constructor de la forma anterior, desde php 8 existe una forma mas corta
class Persona {
public function __construct(public string $nombre, public int $edad) {
}
// Las variables se definen en el propio constructor
// y cada variable tendra los valores que se pasen
// en este caso, se le han puesto tambien, tipado a las propiedades
}