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 berakhirOutput:
Logger was created
Working...
Logger was destroyedPoin penting: method __destruct berguna untuk tugas pembersihan seperti menutup file, melepaskan resource, atau mencatat log saat object tidak lagi diperlukan.
Tantangan
SedangLengkapi class Resource di resource.php:
- Tambahkan method
__constructyang menerima$name, menetapkannya sebagai property, dan mencetak"[name] was created" - Tambahkan method
logMessageyang menerima$messagedan mencetak"Log: [message]" - Tambahkan method
__destructyang 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");
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengenalan OOPclass vs objectKata Kunci $thismethodpropertyConstructor (__construct)Destructor (__destruct)Ringkasan: Kalkulator Sederhana4Pewarisan
Pewarisan DasarKata Kunci parent::Penimpaan methodKata Kunci finalClass AbstrakRingkasan: Hierarki Karyawan7Enkapsulasi
Public, Protected, PrivateModifier Akses secara MendalamGetter dan SetterPenyembunyian InformasiPromosi Constructor (8.0)Ulasan: Sistem Catatan Siswa2Namespace dan Autoloading
Pengenalan NamespaceKata Kunci useStandar Autoloading PSR-4Autoloader ComposerRingkasan: Proyek yang Terorganisasi5Interface dan Kontrak
Pengenalan InterfaceMengimplementasikan InterfaceImplementasi Beberapa InterfaceInterface vs Abstract ClassPetunjuk Tipe dengan InterfaceRekap: Kalkulator Bentuk8Magic Methods
Pengantar Magic Methods__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Cloning Object__serialize & __unserializeRingkasan: Koleksi Kustom11Sistem Tipe Data dan Penanganan Error
Deklarasi TipeTipe NullableTipe Union dan IntersectionClass ExceptionHierarki Exception KustomTry, Catch, FinallyRekap: Validator Form3Property dalam class
Property instance vs staticKonstanta dalam classMethod & property staticProperty private & protectedProperty readonly (PHP 8.1)Ulasan: Pengelola Rekening Bank6Polimorfisme
Meninjau Kembali Method OverridingPolimorfisme melalui AntarmukaPetunjuk Tipe dan Tipe UnionPengikatan Statis TertundaRangkuman: Pemroses PembayaranLatihan sendiri: Compiler PHP online