Menu
CoddyTech

Destructor (__destruct)

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 8 dari 91.

method __destruct adalah method khusus yang otomatis dipanggil saat object dihancurkan. Object dihancurkan saat tidak ada lagi referensi ke object tersebut atau saat skrip berakhir.

Berikut contoh class dengan constructor dan destructor:

<?php
class Resource {
    public $name;

    public function __construct($name) {
        $this->name = $name;
        echo $this->name . " was created\n";
    }

    public function __destruct() {
        echo $this->name . " was destroyed\n";
    }
}

Buat object dan amati siklus hidupnya:

echo "=== Start ===\n";
$r = new Resource("Connection");
echo "Using " . $r->name . "\n";
unset($r);  // hancurkan object secara eksplisit
echo "=== End ===\n";

Output:

=== Start ===
Connection was created
Using Connection
Connection was destroyed
=== End ===

Fungsi unset() menghapus referensi ke object, sehingga destructor langsung dijalankan.

Jika kamu tidak memanggil unset(), destructor berjalan otomatis saat skrip selesai:

$r = new Resource("Logger");
echo "Working...\n";
// __destruct dipanggil secara otomatis saat skrip berakhir

Output:

Logger was created
Working...
Logger was destroyed

Poin penting: method __destruct berguna untuk tugas pembersihan seperti menutup file, melepaskan resource, atau mencatat log saat object tidak lagi diperlukan.

challenge icon

Tantangan

Sedang

Lengkapi class Resource di resource.php:

  1. Tambahkan method __construct yang menerima $name, menetapkannya sebagai property, dan mencetak "[name] was created"
  2. Tambahkan method logMessage yang menerima $message dan mencetak "Log: [message]"
  3. Tambahkan method __destruct yang mencetak "[name] was destroyed"

File driver.php akan menguji siklus hidup object Resource-mu.

Coba sendiri

<?php
require_once 'resource.php';

$testCase = trim(fgets(STDIN));

if ($testCase == "basic_test") {
    echo "=== Start ===\n";
    $r = new Resource("FileHandler");
    echo "Using " . $r->name . "\n";
    unset($r);
    echo "=== End ===\n";
} elseif ($testCase == "auto_destruct_test") {
    $r = new Resource("Logger");
    $r->logMessage("Application started");
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler PHP online