Metodo magico __destruct - OOP in PHP
Indice
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();
?>