0
0
PHPprogramming~20 mins

Type hinting with parent classes in PHP - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Master of Type Hinting with Parent Classes
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of method call with parent class type hint
What is the output of this PHP code when calling processAnimal with a Dog instance?
PHP
<?php
class Animal {
    public function speak(): string {
        return "Animal sound";
    }
}

class Dog extends Animal {
    public function speak(): string {
        return "Bark";
    }
}

function processAnimal(Animal $animal): string {
    return $animal->speak();
}

$dog = new Dog();
echo processAnimal($dog);
?>
ABark
BAnimal sound
CFatal error: Argument must be of type Animal
DEmpty output
Attempts:
2 left
💡 Hint
Remember that type hinting with a parent class allows instances of child classes.
Predict Output
intermediate
2:00remaining
Return type with parent class hint
What will be the output of this PHP code when calling getAnimalSound()?
PHP
<?php
class Animal {
    public function speak(): string {
        return "Animal sound";
    }
}

class Cat extends Animal {
    public function speak(): string {
        return "Meow";
    }
}

function getAnimalSound(): Animal {
    return new Cat();
}

echo getAnimalSound()->speak();
?>
AFatal error: Cannot return subclass instance
BAnimal sound
CMeow
DTypeError: Return value must be of type Animal
Attempts:
2 left
💡 Hint
Returning a subclass instance is allowed when the return type is a parent class.
🔧 Debug
advanced
2:00remaining
Identify the error with type hinting and class hierarchy
What error will this PHP code produce when calling handleAnimal(new Bird());?
PHP
<?php
class Animal {}
class Dog extends Animal {}

function handleAnimal(Dog $dog) {
    echo "Handling dog";
}

class Bird extends Animal {}

handleAnimal(new Bird());
?>
AOutputs: Handling dog
BFatal error: Argument must be of type Dog, Bird given
CNo output, silently ignored
DParse error: Unexpected token
Attempts:
2 left
💡 Hint
Check if Bird is a Dog or subclass of Dog.
📝 Syntax
advanced
2:00remaining
Which option causes a syntax error with type hinting?
Which of the following PHP function declarations will cause a syntax error?
Afunction foo(Animal|Dog $a) {}
Bfunction foo(Animal $a): Dog {}
Cfunction foo(Animal $a): Dog|Animal {}
Dfunction foo(Animal $a): Animal|Dog {}
Attempts:
2 left
💡 Hint
Union types in parameters must be valid classes or types; check if Animal|Dog is allowed.
🚀 Application
expert
3:00remaining
Count instances accepted by a function with parent class type hint
Given these classes and function, how many objects in the array will be accepted by handleAnimal(Animal $a) without error?
PHP
<?php
class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}
class Bird {}

function handleAnimal(Animal $a) {
    echo get_class($a) . " accepted\n";
}

$objects = [new Dog(), new Cat(), new Bird(), new Animal()];

foreach ($objects as $obj) {
    handleAnimal($obj);
}
?>
A4
B1
C2
D3
Attempts:
2 left
💡 Hint
Only instances of Animal or its subclasses are accepted.