📖 Scenario: Imagine you are managing a simple library system. Each book is represented by an object. When a book object is no longer needed, it should announce that it is being removed from the system.
🎯 Goal: You will create a PHP class called Book with a destructor method that prints a message when a book object is destroyed.
📋 What You'll Learn
Create a class named Book
Add a constructor method that sets the book's title
Add a destructor method that prints a message when the object is destroyed
Create an instance of the Book class
Destroy the object to see the destructor message
💡 Why This Matters
🌍 Real World
Destructors help clean up resources or show messages when objects are no longer needed, like closing files or freeing memory.
💼 Career
Understanding destructors is important for managing resources efficiently in PHP applications, especially in web development and backend programming.
Progress0 / 4 steps
1
Create the Book class with a title property
Create a class called Book with a public property title. Add a constructor method __construct that takes one parameter $title and assigns it to the title property.
PHP
Hint
Use class Book {} to create the class. Inside, declare public string $title;. Then add public function __construct(string $title) { $this->title = $title; }.
2
Add a destructor method to the Book class
Inside the Book class, add a destructor method named __destruct that prints the message "Destroying book: " followed by the book's title and a newline.
PHP
Hint
Define public function __destruct() { echo "Destroying book: " . $this->title . "\n"; } inside the class.
3
Create a Book object with the title "PHP Basics"
Create a variable named $myBook and assign it a new Book object with the title "PHP Basics".
PHP
Hint
Write $myBook = new Book("PHP Basics"); to create the object.
4
Destroy the $myBook object to trigger the destructor
Use the unset function on the variable $myBook to destroy the object and trigger the destructor message.
PHP
Hint
Use unset($myBook); to remove the object and see the destructor message.
Practice
(1/5)
1. What is the purpose of the __destruct method in a PHP class?
easy
A. To clean up resources when an object is destroyed
B. To initialize object properties when created
C. To define a class constant
D. To handle user input validation
Solution
Step 1: Understand the role of __destruct
The __destruct method 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 A
Quick Check:
Destructor method = cleanup on object destruction [OK]
Hint: Destructor cleans up when object is removed from memory [OK]
Common Mistakes:
Confusing __destruct with __construct
Thinking it initializes objects
Using it to handle input validation
2. Which of the following is the correct syntax to declare a destructor method in PHP?
easy
A. function __destruct() {}
B. function destruct() {}
C. function _destruct() {}
D. function __destroy() {}
Solution
Step 1: Recall PHP destructor naming
PHP destructor methods must be named exactly __destruct with two underscores.
Step 2: Check syntax correctness
The correct syntax is function __destruct() {}. Other options have incorrect names.
Final Answer:
function __destruct() {} -> Option A
Quick Check:
Destructor syntax = __destruct() [OK]
Hint: Destructor always starts with double underscores __destruct [OK]
Common Mistakes:
Using single underscore or wrong method name
Omitting parentheses in method declaration
Confusing with __construct method
3. What will be the output of the following PHP code?
class Test {
function __construct() {
echo "Constructed\n";
}
function __destruct() {
echo "Destructed\n";
}
}
$obj = new Test();
echo "Hello\n";
unset($obj);
medium
A. Constructed\nDestructed\nHello\n
B. Hello\nConstructed\nDestructed\n
C. Destructed\nConstructed\nHello\n
D. Constructed\nHello\nDestructed\n
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. Then unset($obj); destroys the object, triggering __destruct() which prints "Destructed\n".
Final Answer:
Constructed\nHello\nDestructed\n -> Option D
Quick Check:
Constructor then echo then destructor [OK]
Hint: Destructor runs when object is unset or script ends [OK]
Common Mistakes:
Assuming destructor runs before echo
Confusing order of constructor and destructor
Missing that unset triggers destructor immediately
4. Identify the error in this PHP class related to the destructor method:
class Sample {
function __destruct {
echo "Cleaning up";
}
}
medium
A. Destructor must be static
B. Destructor name should be __destroy
C. Missing parentheses in destructor declaration
D. Destructor cannot echo text
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 C
Quick Check:
Destructor needs () after name [OK]
Hint: Always add () after __destruct method name [OK]
Common Mistakes:
Omitting parentheses in method declaration
Using wrong destructor name
Thinking destructor must be static
5. You want to ensure a file is always closed when your PHP object is destroyed. Which code snippet correctly uses a destructor to do this?
class FileHandler {
private $file;
function __construct($filename) {
$this->file = fopen($filename, 'w');
}
// What goes here?
}
hard
A. function __destruct() {
open($this->file);
}
B. function __destruct() {
fclose($this->file);
}
C. function __destruct() {
fclose($filename);
}
D. function __destruct() {
$this->file = null;
}
Solution
Step 1: Understand resource cleanup in destructor
The destructor should close the file resource held in $this->file using fclose().
Step 2: Check each option for correctness
function __destruct() {
fclose($this->file);
} correctly calls fclose($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 B
Quick Check:
Destructor closes file resource properly [OK]
Hint: Destructor should close resources like files with fclose() [OK]
Common Mistakes:
Calling wrong function like open() instead of fclose()
Using undefined variables inside destructor
Not actually closing the resource, just nullifying
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.