Metodo magico __destruct - OOP in PHP

Metodo magico __destruct - OOP in PHP

Cos'è e a cosa serve il metodo magico __destruct

Il metodo magico __destruct è un metodo speciale definito in una classe PHP che viene invocato automaticamente quando un oggetto della classe viene distrutto. Il metodo __destruct viene chiamato alla fine del ciclo di vita dell'oggetto e può essere utilizzato per eseguire operazioni di pulizia, come la chiusura di file aperti o la liberazione di risorse.

Il metodo destruct serve a compiere delle operazioni prima che un oggetto venga "distrutto", come ad esempio chiudere la connesione con un database o chiudere un file aperto per leggere o scrivere del contenuto all'interno.

Va detto che nella maggior parte dei casi è PHP stesso che si occuperà di chiudere una connessione aperta con un DB.

Il metodo magico __destruct viene maggiormente utilizzato in applicazioni complesse, dove è importante liberare le risorse quando un oggetto viene distrutto. Ad esempio, quando un oggetto rappresenta una connessione al database, il metodo __destruct può essere utilizzato per chiudere la connessione e liberare le risorse utilizzate.

Sintassi del metodo magico __destruct

public function __destruct()
{
   // codice di pulizia
}

Esempio utilizzando il metodo magico destruct

<?php
/* Il metodo destruct serve a compiere delle operazioni prima che un oggetto
    venga "distrutto", come ad esempio chiudere la connesione con un database
    o chiudere un file aperto per leggere o scrivere del contenuto all'interno.
    Va detto che nella maggior parte dei casi è PHP stesso che si occuperà di chiudere
    una connessione aperta con un DB.
    */

// Facciamo un esempio per leggere del contenuto all'interno di un file
class FileManager {
    private $fh; //Creiamo una proprietà privata fileHandle
    private $filename; //Creiamo una proprietà privata FileName

    /*  definiamo un construttore passando come argomenti il file che vogliamo leggere
        e la modalità in cui vogliamo aprire il file (scrittura, lettura)    
    */
    public function __construct($filename, $mode) { 
        $this->filename = $filename; //assegniamo il valore del file alle proprietà $filename
        $this->fh = fopen($filename,$mode); // usiamo la funzione fopen per aprire il file e la modalità di apertura
    }

    // Definiamo un metodo publico read
    public function read(){
        /* leggiamo all'interno del file con la funzione fread passando come argomenti:
            - il riferimento al file aperto (che ritorna la funzione fopen)
            - indichiamo la quantità del file che vogliamo leggere con la funzione filesize()
        */
        echo fread($this->fh, filesize($this->filename)); 
    }

    /* Definiamo il metodo destruct per sincerarci di andare a chiudere il file 
    che abbiamo aperto in precedenza.
    */
    public function __destruct(){
        fclose($this->fh);
    }
}

// Istanziamo l'oggetto passando in input il file che vogliamo leggere e la modalità di lettura (r).
$leggiFile = new FileManager('./lib/text.txt', 'r');
$leggiFile->read();
?>

Scritto da Donato Pirolo

Ciao, sono Donato, frontend developer con una smisurata passione per la SEO. Creo strumenti ad hoc per aiutare aziende e professionisti ad essere cercati sul web e trovare clienti.

Potrebbero interessarti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Copyright © 2023
linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram