Instanceof operator in PHP - Time & Space Complexity
Let's see how the time it takes to check if an object is an instance of a class changes as the program runs.
We want to know how the cost of using the instanceof operator grows with the number of checks.
Analyze the time complexity of the following code snippet.
class Animal {}
class Dog extends Animal {}
$dogs = [];
for ($i = 0; $i < $n; $i++) {
$dogs[] = new Dog();
}
foreach ($dogs as $dog) {
if ($dog instanceof Animal) {
// do something
}
}
This code creates many Dog objects and checks if each one is an instance of Animal.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The
foreachloop that checksinstanceoffor each object. - How many times: It runs once for every object in the array, so
ntimes.
Each new object adds one more check. So if you double the objects, you double the checks.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 instanceof checks |
| 100 | 100 instanceof checks |
| 1000 | 1000 instanceof checks |
Pattern observation: The number of checks grows directly with the number of objects.
Time Complexity: O(n)
This means the time to check all objects grows in a straight line as you add more objects.
[X] Wrong: "The instanceof check is slow and grows exponentially with more objects."
[OK] Correct: Each instanceof check is simple and constant time; the total time grows only as you add more objects, not faster.
Understanding how instanceof checks scale helps you write efficient code when working with many objects, a useful skill in real projects.
"What if we nested instanceof checks inside another loop over the same objects? How would the time complexity change?"
Practice
instanceof operator do in PHP?Solution
Step 1: Understand the purpose of
Theinstanceofinstanceofoperator is used to check if a variable is an object of a certain class or subclass.Step 2: Differentiate from other operations
It does not create, delete, or convert objects; it only checks their type.Final Answer:
Checks if an object is an instance of a specific class or its subclass -> Option BQuick Check:
instanceof checks object type [OK]
- Confusing instanceof with object creation
- Thinking instanceof deletes objects
- Assuming instanceof converts objects to strings
$obj is an instance of class Car?Solution
Step 1: Recall correct
The correct syntax is:instanceofsyntaxvariable instanceof ClassName, without extra keywords or rearrangement.Step 2: Check each option
if ($obj instanceof Car) {} matches the correct syntax exactly. Others have wrong keywords or order.Final Answer:
if ($obj instanceof Car) {} -> Option DQuick Check:
Correct instanceof syntax [OK]
- Using 'is' instead of 'instanceof'
- Reversing order of variable and class
- Adding extra keywords inside condition
$a = new DateTime();
if ($a instanceof DateTime) {
echo 'Yes';
} else {
echo 'No';
}Solution
Step 1: Understand object creation
$a is created as a new instance of the DateTime class.Step 2: Check instanceof condition
The condition$a instanceof DateTimeis true because $a is exactly a DateTime object.Final Answer:
Yes -> Option AQuick Check:
Object is DateTime = Yes [OK]
- Assuming instanceof returns false for exact class
- Expecting syntax error from instanceof
- Ignoring else branch output
class Animal {}
class Dog extends Animal {}
$dog = new Dog();
if ($dog instanceof 'Animal') {
echo 'It is an animal';
}Solution
Step 1: Check instanceof usage
Theinstanceofoperator expects a class name without quotes, not a string.Step 2: Verify other parts
Classes and object creation are correct; semicolons are present.Final Answer:
Using quotes around class name in instanceof -> Option CQuick Check:
Class name must be unquoted in instanceof [OK]
- Putting class names in quotes inside instanceof
- Confusing instanceof with string comparison
- Missing semicolons elsewhere (not in this code)
class Vehicle {}
class Car extends Vehicle {}
class Bike extends Vehicle {}
function checkVehicle($obj) {
if ($obj instanceof Car) {
return 'Car';
} elseif ($obj instanceof Vehicle) {
return 'Vehicle';
} else {
return 'Unknown';
}
}
$myBike = new Bike();
echo checkVehicle($myBike);Solution
Step 1: Analyze object type
$myBike is an instance of Bike, which extends Vehicle.Step 2: Follow function logic
First condition checks if $obj is Car - false. Second checks if $obj is Vehicle - true because Bike is subclass of Vehicle.Final Answer:
Vehicle -> Option AQuick Check:
Bike is a Vehicle, not Car = Vehicle [OK]
- Expecting 'Car' for Bike object
- Ignoring subclass relationship in instanceof
- Assuming instanceof only matches exact class
Ready to prove it?
Pass the test and this pattern moves unknown
