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
}