__construct and __destruct in PHP - Time & Space Complexity
Let's see how the time cost changes when using __construct and __destruct methods in PHP classes.
We want to know how the program's work grows as we create more objects.
Analyze the time complexity of the following code snippet.
class Example {
public function __construct() {
// Initialization work
}
public function __destruct() {
// Cleanup work
}
}
for ($i = 0; $i < $n; $i++) {
$obj = new Example();
}
This code creates $n objects, each running __construct when made and __destruct when destroyed.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Creating an object which calls __construct and later __destruct.
- How many times: Exactly $n times, once per loop iteration.
Each new object adds a fixed amount of work for construction and destruction.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 20 (10 constructions + 10 destructions) |
| 100 | About 200 (100 constructions + 100 destructions) |
| 1000 | About 2000 (1000 constructions + 1000 destructions) |
Pattern observation: The total work grows directly with the number of objects created.
Time Complexity: O(n)
This means the time needed grows in a straight line as you create more objects.
[X] Wrong: "__construct and __destruct run only once no matter how many objects are created."
[OK] Correct: Each object calls these methods separately, so the work adds up with more objects.
Understanding how object creation and cleanup scale helps you write efficient code and explain your reasoning clearly in interviews.
"What if __construct did a loop inside that runs m times? How would the time complexity change?"
Practice
__construct method in a PHP class?Solution
Step 1: Understand the role of
The__construct__constructmethod is automatically called when a new object is created from a class.Step 2: Identify its purpose
It is used to set up or initialize the object, like setting initial values or preparing resources.Final Answer:
To initialize an object when it is created -> Option DQuick Check:
__construct= initialize object [OK]
- Confusing __construct with __destruct
- Thinking __construct deletes objects
- Assuming __construct prints output
Solution
Step 1: Recall PHP destructor syntax
PHP uses the special method named__destructwith two underscores to define destructors.Step 2: Match the correct syntax
The correct syntax isfunction __destruct() {}. Other options are invalid method names for destructors.Final Answer:
function __destruct() {} -> Option AQuick Check:
Destructor syntax = __destruct() [OK]
- Using single underscore or wrong method name
- Forgetting parentheses in method definition
- Confusing destructor with constructor syntax
class Test {
function __construct() {
echo "Start ";
}
function __destruct() {
echo "End";
}
}
$obj = new Test();
echo "Middle ";Solution
Step 1: Trace constructor execution
When$obj = new Test();runs,__constructprints "Start ".Step 2: Trace echo after object creation
Next,echo "Middle ";prints "Middle ".Step 3: Understand destructor timing
Destructor__destructruns when script ends or object is destroyed, printing "End" last.Final Answer:
Start Middle End -> Option CQuick Check:
Constructor -> echo -> Destructor = Start Middle End [OK]
- Assuming destructor runs immediately after constructor
- Mixing order of printed words
- Forgetting destructor runs at script end
class Sample {
function __construct {
echo "Hello";
}
function __destruct() {
echo "Goodbye";
}
}
$obj = new Sample();Solution
Step 1: Check constructor syntax
The__constructmethod is missing parentheses()after its name, which is required in PHP.Step 2: Verify other parts
The destructor name and syntax are correct, class name capitalization is not mandatory, and echo statements have semicolons.Final Answer:
Missing parentheses in __construct method definition -> Option BQuick Check:
Constructor needs () after name [OK]
- Omitting parentheses in method definitions
- Thinking destructor name is wrong
- Believing class names must be capitalized
__construct and __destruct for this purpose?Solution
Step 1: Analyze constructor for opening file
class FileHandler { private $file; function __construct($filename) { $this->file = fopen($filename, 'r'); } function __destruct() { fclose($this->file); } } correctly opens the file withfopenand stores the handle in$this->file.Step 2: Analyze destructor for closing file
class FileHandler { private $file; function __construct($filename) { $this->file = fopen($filename, 'r'); } function __destruct() { fclose($this->file); } } correctly closes the file usingfclose($this->file)in the destructor, ensuring cleanup.Step 3: Check other options for errors
class FileHandler { private $file; function __construct() { fclose($this->file); } function __destruct() { $this->file = fopen('file.txt', 'r'); } } reverses open/close actions. class FileHandler { function __construct($filename) { fclose($filename); } function __destruct() { fopen($filename, 'r'); } } misusesfcloseandfopenwith wrong variables. class FileHandler { private $file; function __construct($filename) { $this->file = fopen($filename, 'r'); } function __destruct() { echo 'File closed'; } } does not close the file, only prints a message.Final Answer:
class FileHandler { private $file; function __construct($filename) { $this->file = fopen($filename, 'r'); } function __destruct() { fclose($this->file); } } -> Option AQuick Check:
Open in __construct, close in __destruct = class FileHandler { private $file; function __construct($filename) { $this->file = fopen($filename, 'r'); } function __destruct() { fclose($this->file); } } [OK]
- Closing file in constructor or opening in destructor
- Not storing file handle in a property
- Only printing message instead of closing resource
Ready to prove it?
Pass the test and this pattern moves unknown
