Parent keyword behavior in PHP - Time & Space Complexity
We want to see how using the parent keyword affects the speed of a PHP program.
Specifically, how does calling a parent method inside a child class grow as the program runs?
Analyze the time complexity of the following code snippet.
class Base {
public function process(array $items) {
foreach ($items as $item) {
// Some simple operation
}
}
}
class Child extends Base {
public function process(array $items) {
parent::process($items);
// Additional child processing
}
}
$child = new Child();
$child->process(range(1, 1000));
This code calls a parent method from a child class, passing an array to process.
Look for loops or repeated calls inside the methods.
- Primary operation: The
foreachloop inside theBase::processmethod. - How many times: Once for each item in the input array.
The loop runs once for every item, so if the input doubles, the work doubles too.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 loop steps |
| 100 | About 100 loop steps |
| 1000 | About 1000 loop steps |
Pattern observation: The work grows directly with the number of items.
Time Complexity: O(n)
This means the time to run grows in a straight line with the input size.
[X] Wrong: "Using parent:: adds extra loops or makes the program slower in a complex way."
[OK] Correct: Calling parent:: just runs the parent's code once; it doesn't add hidden loops or multiply work.
Understanding how parent method calls affect performance helps you write clear, efficient code in real projects.
What if the child method called parent::process inside a loop over the items? How would the time complexity change?
Practice
parent keyword do in PHP classes?Solution
Step 1: Understand the role of
Theparentkeywordparentkeyword in PHP is used inside a child class to refer to its parent class.Step 2: Identify what
It allows the child class to call or extend methods or properties defined in the parent class.parentallowsFinal Answer:
It allows a child class to access methods or properties from its parent class. -> Option DQuick Check:
parentaccesses parent methods/properties [OK]
parent calls parent class features [OK]- Thinking
parentcreates new objects - Confusing
parentwith$this - Believing
parentdeletes methods
show inside a child class method?Solution
Step 1: Recall PHP syntax for calling parent methods
In PHP, to call a parent class method inside a child, use the scope resolution operator::withparent.Step 2: Match the correct syntax
The correct syntax isparent::methodName();, so for methodshow, it isparent::show();.Final Answer:
parent::show(); -> Option CQuick Check:
Use::withparentto call methods [OK]
- Using arrow (->) instead of double colon (::)
- Using dot (.) operator which is for strings
- Using single colon (:) which is invalid syntax
class A {
public function greet() {
return "Hello from A";
}
}
class B extends A {
public function greet() {
return parent::greet() . " and B";
}
}
$b = new B();
echo $b->greet();Solution
Step 1: Understand method overriding and parent call
Class B overridesgreet()but callsparent::greet()which returns "Hello from A".Step 2: Concatenate parent result with " and B"
The child method returns the parent's string plus " and B", so the full string is "Hello from A and B".Final Answer:
Hello from A and B -> Option BQuick Check:
parent::greet() + " and B" = "Hello from A and B" [OK]
- Ignoring parent:: call and expecting only child's string
- Thinking it causes an error
- Confusing output with only parent's or only child's string
class ParentClass {
public function sayHi() {
echo "Hi from parent";
}
}
class ChildClass extends ParentClass {
public function sayHi() {
parent.sayHi();
echo " and child";
}
}
$obj = new ChildClass();
$obj->sayHi();Solution
Step 1: Check how parent method is called
The code usesparent.sayHi();which is invalid syntax in PHP.Step 2: Correct syntax uses scope resolution operator
It should beparent::sayHi();to call the parent method inside child.Final Answer:
Using dot (.) instead of scope resolution (::) to call parent method -> Option AQuick Check:
Useparent::method(), notparent.method()[OK]
- Using dot (.) operator for method calls
- Forgetting parentheses after method name
- Assuming private methods can be called by child
class Base {
protected function message() {
return "Base message";
}
}
class Derived extends Base {
public function message() {
return parent::message() . " extended";
}
}
class MoreDerived extends Derived {
public function message() {
return parent::message() . " and more";
}
}
$obj = new MoreDerived();
echo $obj->message();Solution
Step 1: Trace method calls through inheritance
MoreDerived::message()callsparent::message()which isDerived::message().Step 2: Derived::message() calls Base::message()
Derived callsparent::message()which isBase::message()returning "Base message" and appends " extended".Step 3: Combine all returned strings
So Derived returns "Base message extended" and MoreDerived appends " and more" resulting in "Base message extended and more".Final Answer:
Base message extended and more -> Option AQuick Check:
Chained parent calls build full string [OK]
- Expecting error due to protected method (allowed in child)
- Ignoring chained parent calls
- Assuming only base message prints
Ready to prove it?
Pass the test and this pattern moves unknown
