A destructor method helps clean up when an object is no longer needed. It runs automatically to free resources or do final tasks.
Destructor method in PHP
<?php class ClassName { public function __destruct() { // cleanup code here } } ?>
The destructor method is named __destruct with two underscores.
It does not take any parameters and cannot return a value.
<?php class Logger { public function __destruct() { echo "Closing logger.\n"; } } $log = new Logger(); ?>
<?php class FileHandler { private $file; public function __construct($filename) { $this->file = fopen($filename, 'w'); } public function __destruct() { fclose($this->file); echo "File closed.\n"; } } $fh = new FileHandler('test.txt'); ?>
This program shows a connection opening message when the object is created and a closing message when the object is destroyed automatically at the end.
<?php class Connection { public function __construct() { echo "Connection opened.\n"; } public function __destruct() { echo "Connection closed.\n"; } } $conn = new Connection(); echo "Doing some work...\n"; // When script ends or object is no longer used, destructor runs ?>
The destructor runs automatically when the object is no longer referenced or at the end of the script.
You cannot call the destructor method directly; PHP calls it for you.
Use destructors to avoid forgetting to release resources manually.
Destructor methods clean up when an object is destroyed.
They are named __destruct and run automatically.
Use them to close files, connections, or free resources safely.
Practice
__destruct method in a PHP class?Solution
Step 1: Understand the role of
The__destruct__destructmethod is called automatically when an object is destroyed or goes out of scope.Step 2: Identify its purpose
It is used to clean up resources like closing files or database connections safely.Final Answer:
To clean up resources when an object is destroyed -> Option AQuick Check:
Destructor method = cleanup on object destruction [OK]
- Confusing __destruct with __construct
- Thinking it initializes objects
- Using it to handle input validation
Solution
Step 1: Recall PHP destructor naming
PHP destructor methods must be named exactly__destructwith two underscores.Step 2: Check syntax correctness
The correct syntax isfunction __destruct() {}. Other options have incorrect names.Final Answer:
function __destruct() {} -> Option AQuick Check:
Destructor syntax = __destruct() [OK]
- Using single underscore or wrong method name
- Omitting parentheses in method declaration
- Confusing with __construct method
class Test {
function __construct() {
echo "Constructed\n";
}
function __destruct() {
echo "Destructed\n";
}
}
$obj = new Test();
echo "Hello\n";
unset($obj);Solution
Step 1: Trace object creation and constructor call
When$obj = new Test();runs,__construct()prints "Constructed\n".Step 2: Print "Hello" and then unset object
Next, "Hello\n" is printed. Thenunset($obj);destroys the object, triggering__destruct()which prints "Destructed\n".Final Answer:
Constructed\nHello\nDestructed\n -> Option DQuick Check:
Constructor then echo then destructor [OK]
- Assuming destructor runs before echo
- Confusing order of constructor and destructor
- Missing that unset triggers destructor immediately
class Sample {
function __destruct {
echo "Cleaning up";
}
}Solution
Step 1: Check destructor method syntax
The destructor method must include parentheses even if it has no parameters:function __destruct() {}.Step 2: Identify the missing parentheses error
The code misses parentheses after__destruct, causing a syntax error.Final Answer:
Missing parentheses in destructor declaration -> Option CQuick Check:
Destructor needs () after name [OK]
- Omitting parentheses in method declaration
- Using wrong destructor name
- Thinking destructor must be static
class FileHandler {
private $file;
function __construct($filename) {
$this->file = fopen($filename, 'w');
}
// What goes here?
}Solution
Step 1: Understand resource cleanup in destructor
The destructor should close the file resource held in$this->fileusingfclose().Step 2: Check each option for correctness
function __destruct() { fclose($this->file); } correctly callsfclose($this->file);. function __destruct() { open($this->file); } tries to open instead of close. function __destruct() { fclose($filename); } uses undefined$filename. function __destruct() { $this->file = null; } just sets property to null without closing.Final Answer:
function __destruct() { fclose($this->file); } -> Option BQuick Check:
Destructor closes file resource properly [OK]
- Calling wrong function like open() instead of fclose()
- Using undefined variables inside destructor
- Not actually closing the resource, just nullifying
Ready to prove it?
Pass the test and this pattern moves unknown
