Type hinting with parent classes helps your program know what kind of objects to expect. It makes your code safer and easier to understand.
Type hinting with parent classes in PHP
function exampleFunction(ParentClass $obj) { // code using $obj }
The type hint uses the parent class name before the variable.
This means any object that is an instance of the parent class or its child classes is allowed.
<?php class Animal {} class Dog extends Animal {} function feedAnimal(Animal $animal) { echo "Feeding an animal.\n"; } $dog = new Dog(); feedAnimal($dog);
<?php class Vehicle {} class Car extends Vehicle {} function startEngine(Vehicle $vehicle) { echo "Starting engine.\n"; } $car = new Car(); startEngine($car);
This program shows a function that accepts any Fruit or its child classes. It calls the eat method, which behaves differently for Apple.
<?php class Fruit { public function eat() { echo "Eating fruit.\n"; } } class Apple extends Fruit { public function eat() { echo "Eating apple.\n"; } } function enjoyFruit(Fruit $fruit) { $fruit->eat(); } $apple = new Apple(); enjoyFruit($apple);
Type hinting with parent classes allows flexibility while keeping type safety.
If you pass an object not related to the parent class, PHP will give an error.
This helps catch mistakes early and makes your code easier to read.
Type hinting with parent classes lets functions accept any child class objects.
It improves code safety and flexibility.
Use it to ensure objects have expected methods or properties.
Practice
What does type hinting with a parent class in PHP allow?
For example, using function foo(ParentClass $obj).
Solution
Step 1: Understand type hinting with parent classes
Type hinting with a parent class means the function accepts objects of that class or any subclass.Step 2: Apply to the example
UsingParentClass $objallows passing instances of ParentClass or any class that extends it.Final Answer:
It allows passing any object that is an instance of the parent class or its child classes. -> Option DQuick Check:
Parent class type hint = accepts parent or child objects [OK]
- Thinking only exact parent class objects are accepted
- Believing child classes are excluded
- Confusing type hinting with disabling checks
Which of the following is the correct syntax to type hint a function parameter with a parent class Animal in PHP?
function feed(____ $pet) { /* ... */ }Solution
Step 1: Recall PHP type hint syntax
In PHP, the type hint comes before the variable name:Type $variable.Step 2: Apply to the example
For class Animal, the correct syntax isAnimal $pet.Final Answer:
Animal $pet -> Option AQuick Check:
Type hint before variable name = Animal $pet [OK]
- Placing variable before type hint
- Adding extra keywords like 'class' or 'type'
- Omitting the $ sign on variable
Given the code below, what will be the output?
class Vehicle {}
class Car extends Vehicle {}
function startEngine(Vehicle $v) {
echo get_class($v);
}
$car = new Car();
startEngine($car);Solution
Step 1: Understand type hinting with inheritance
The function expects a Vehicle object or subclass. Car extends Vehicle, so passing Car is valid.Step 2: Analyze output of get_class()
get_class($v) returns the actual class name of the object, which is 'Car'.Final Answer:
Car -> Option CQuick Check:
Type hint accepts subclass; get_class returns actual class [OK]
- Assuming output is parent class name
- Expecting a type error for subclass
- Thinking no output is produced
What is the error in the following PHP code?
class Fruit {}
class Apple extends Fruit {}
function eat(Apple $fruit) {
echo "Eating apple";
}
$fruit = new Fruit();
eat($fruit);Solution
Step 1: Check type hint and argument
The function expects an Apple object, but the argument is a Fruit object (parent class).Step 2: Understand PHP type hint rules
PHP requires the argument to be the hinted class or subclass, not a parent class. Passing Fruit causes a fatal error.Final Answer:
Fatal error: Argument must be of type Apple, Fruit given -> Option BQuick Check:
Type hint mismatch with parent class argument = fatal error [OK]
- Thinking parent class can replace child hint
- Expecting no error on type mismatch
- Confusing syntax error with type error
Consider the following classes and function:
class Employee {}
class Manager extends Employee {}
class Developer extends Employee {}
function assignTask(Employee $e) {
if ($e instanceof Manager) {
return "Assigning management task";
} elseif ($e instanceof Developer) {
return "Assigning coding task";
} else {
return "Assigning general task";
}
}
$worker = new Manager();
echo assignTask($worker);What will be the output and why?
Solution
Step 1: Check type hint and argument
The function accepts any Employee or subclass. Manager is a subclass, so passing $worker is valid.Step 2: Evaluate instanceof conditions
The code checks if $e is a Manager, which is true, so it returns "Assigning management task".Final Answer:
Assigning management task -> Option AQuick Check:
Type hint accepts subclass; instanceof detects Manager [OK]
- Expecting type error for subclass argument
- Ignoring instanceof checks order
- Assuming general task is assigned
Ready to prove it?
Pass the test and this pattern moves unknown
