Tutorial

Tutorial PHP Magic Method __destruct()

Diposting oleh I. B. Gd Pramana A. Putra pada 13 Feb 22, diperbarui pada 17 Jul 22

Pada bagian __destruct() PHP ini, kita akan belajar mengenal dan memahami kegunaan __destruct() pada PHP, serta apa yang membuatnya berbeda dari __construct() PHP.

Pengertian __destruct PHP

Destructor pada bahasa pemrograman PHP adalah salah satu magic method yang akan terpanggil ketika suatu obyek dihapus atau obyek tersebut dihentikkan.

Pada dasarnya bahasa pemrograman memiliki fitur garbage collector yang akan menghapus resource yang digunakan oleh suatu obyek pada memori secara otomatis. Sedangkan method destructor memungkinkan programmer untuk menghapus resource yang terpakai oleh suatu obyek dari memori secara manual.

Penerapan __destruct PHP

Method destruktor dideklarasikan dengan format berikut:

public __destruct ( void ) : void

Format di atas memberitahu kita bahwa method destructor tidak menerima argumen apapun sebagai parameternya, dan tipe dari method ini adalah void.

Contoh deklarasi dan penggunaan __destruct PHP

Salah satu contoh yang paling cocok untuk penggunaan method destructor adalah ketika kita membuat sebuah class yang melakukan pembacaan terhadap suatu file.

Method destructor dipanggil untuk menghentikan pembacaan suatu file ketika proses sudah selesai atau obyek yang membaca file tersebur sudah dihapus/dihancurkan.

class FileReader
{ 
 	private $handle;
 	private $filename;
 
     /**
     * inits file util with filename and mode
     * @param string $filename
     * @param string $mode
     */
 	public function __construct($filename, $mode)	
    {
 		$this->filename = $filename;
 		$this->handle = fopen($filename, $mode);
	}
 
     /**
     * close the file handle
     */
     public function __destruct() 
     {
     	if ($this->handle) {
     		fclose($this->handle);
        }
     }

     /**
     * display file content
     */
     public function display()
     {
     	echo fread($this->handle, filesize($this->filename));
     }
}

Pada class di atas terdapat dua buah magic method yakni __construct dan __destruct. Pada constructor kita melakukan assignment terhadap properti class tersebut dengan suatu nilai sesaat setelah obyek tersebut dibuat (instantiated).

Sementara pada destructor kita menanamkan perintah If untuk mengecek apakah obyek tersebut memiliki file yang dibaca, jika iya maka fungsi bawaan PHP fclose yang diperuntukkan untuk menutup suatu file yang terbuka (baca: diproses) saat obyek tersebut dihapus atau dihentikan.

Selain dua buah magic method, terhadap fungsi buatan display yang akan digunakan untuk menampilkan isi dari file yang dibaca/diproses.

Sekarang saatnya menguji coba class di atas, pertama kita akan melakukan pembuatan obyek baru dari class tersebut.

$readFile = new FileReader('kodekativ.txt', 'r');

Kita melakukan instantiasi (membuat obyek) dari class FileReader tersebut dengan memasukkan dua buah parameter yang dibutuhkan oleh constructor class yakni yang pertama adalah file yang akan dibaca/diproses, sementara argumen kedua adalah mode proses yang mana r berarti read.

Lalu panggil method display yang dimiliki obyek tersebut.

$readFile->display();

Sebelumnya kita telah memiliki file bernama kodekativ.txt yang berisi:

URL: https://kodekativ.com/
<br>
Author: Pramana
<br>

Hasilnya

Pada hasil di atas kita tidak melihat apakah destructor berfungsi atau file tersebut sudah berhenti dibaca oleh obyek. Namun kita sudah melihat bahwa obyek yang kita buat dapat membaca file yang kita perintahkan.

Untuk melihat atau mengecek apakah destructor berfungsi, kita akan modifikasi kode dari destructor dengan menambahkan fungsi echo apakah file tersebut sudah selesai dibaca/diproses.

/**
* close the file handle
*/
public function __destruct() 
{
	if ($this->handle) {
     	$close = fclose($this->handle);
     	echo "Is reading done " . $close;
	}
}

Hasil sebagai berikut:

Pada hasil di atas, method destructor dengan fungsi echo tersebut memberitahu kita bahwa nilai dari variabel $close adalah 1 yang berarti TRUE. Ini berarti file tersebut sudah selesai dibaca/diproses oleh obyek.

Referensi: Dokumentasi PHP - Destruktor

Tutorial yang saya buat ini memakan waktu yang cukup lama agar dapat membantumu belajar dan memingkatkan pemahamanmu terkait topik ini. Saya harap tutorial ini bermanfaat buatmu, kalau boleh traktir saya kopi atau makanan ringan ya agar lebih giat rilis tutorial gratis :)

Dukung saya dengan · paypal · buymeacoffee · ko-fi · trakteer
Jawaban & Respon
    Belum ada komentar

Login dulu

Kamu harus login terlebih dahulu sebelum memberikan komentar pada pos ini.