An intersection type requires a value to satisfy multiple type constraints at the same time. It means the value must be an instance of all specified types.
Click to reveal answer
beginner
How do you declare an intersection type in PHP 8.1+?
You use the ampersand (&) symbol between types, for example: <code>function example(SomeInterface&AnotherInterface $obj) {}</code> means $obj must implement both interfaces.
Click to reveal answer
intermediate
Why use intersection types in practice?
They help ensure that a value meets multiple requirements, improving code safety and clarity by enforcing multiple behaviors or properties at once.
Click to reveal answer
intermediate
Can intersection types be used with classes and interfaces together?
Yes. For example, ClassA&InterfaceB means the value must be an instance of ClassA and also implement InterfaceB.
Click to reveal answer
beginner
What happens if a value does not satisfy all types in an intersection type declaration?
PHP will throw a TypeError at runtime, indicating the value does not meet the required intersection type constraints.
Click to reveal answer
Which symbol is used to declare intersection types in PHP?
A,
B|
C&
D:
✗ Incorrect
The ampersand (&) symbol is used to declare intersection types, meaning the value must satisfy all listed types.
What does the intersection type A&B mean in PHP?
AValue must be both A and B
BValue must be A but not B
CValue must be neither A nor B
DValue must be either A or B
✗ Incorrect
Intersection types require the value to satisfy all types, so it must be both A and B.
Can intersection types include multiple interfaces?
AOnly traits can be combined
BNo, only classes
COnly one interface is allowed
DYes, multiple interfaces can be combined
✗ Incorrect
Multiple interfaces can be combined using intersection types to require a value to implement all of them.
What error occurs if a value does not meet an intersection type requirement?
AParseError
BTypeError
CWarning
DNotice
✗ Incorrect
PHP throws a TypeError when a value does not satisfy the intersection type constraints.
Which PHP version introduced intersection types?
APHP 8.1
BPHP 8.0
CPHP 7.4
DPHP 8.2
✗ Incorrect
Intersection types were introduced in PHP 8.1.
Explain how intersection types improve code safety in PHP.
Think about how requiring multiple interfaces or classes helps avoid wrong values.
You got /4 concepts.
Describe how to declare and use an intersection type with a class and an interface in PHP.
Show a function parameter that requires an object to be both a class instance and implement an interface.
You got /4 concepts.
Practice
(1/5)
1. What does an intersection type like A&B mean in PHP?
easy
A. The value must be type B only.
B. The value can be either type A or type B.
C. The value must satisfy both type A and type B simultaneously.
D. The value must be type A only.
Solution
Step 1: Understand intersection type concept
Intersection types require a value to meet all listed types at once, not just one.
Step 2: Apply to A&B
The value must be both type A and type B simultaneously.
Final Answer:
The value must satisfy both type A and type B simultaneously. -> Option C
Quick Check:
Intersection means AND, so both types required [OK]
Hint: Intersection means all types must be met together [OK]
Common Mistakes:
Confusing intersection (&) with union (|)
Thinking it means either type A or B
Assuming it means only one type
2. Which of the following is the correct syntax for declaring a function parameter with an intersection type of interfaces Countable and Iterator?
easy
A. function process(Countable&Iterator $obj) {}
B. function process(Countable|Iterator $obj) {}
C. function process(Countable, Iterator $obj) {}
D. function process(Countable & Iterator $obj) {}
Solution
Step 1: Recall intersection type syntax in PHP
PHP uses the ampersand (&) without spaces and escaped as & in HTML to declare intersection types.
Step 2: Check each option
function process(Countable&Iterator $obj) {} uses Countable&Iterator which is correct syntax for intersection types in PHP.
Final Answer:
function process(Countable&Iterator $obj) {} -> Option A
Quick Check:
Intersection uses & without spaces [OK]
Hint: Use & with no spaces for intersection types [OK]
Common Mistakes:
Using | instead of & for intersection
Adding spaces around &
Using comma instead of &
3. Given the following code, what will be the output?
interface A { public function foo(): string; } interface B { public function bar(): string; }
class C implements A, B { public function foo(): string { return 'foo'; } public function bar(): string { return 'bar'; } }
Step 1: Understand class C implements both interfaces
Class C implements both A and B, so it has methods foo() and bar().
Step 2: Call test with intersection type parameter
Function test requires an object that is both A and B, which $c is. It calls foo() and bar() and echoes their results separated by space.
Final Answer:
foo bar -> Option A
Quick Check:
Object meets both interfaces, so output is 'foo bar' [OK]
Hint: Check if object implements all interfaces in intersection [OK]
Common Mistakes:
Expecting only one method output
Thinking intersection causes error if both interfaces implemented
Confusing union with intersection types
4. What is the error in this code snippet?
interface X { public function x(): void; } interface Y { public function y(): void; }
function example(X&Y $obj) { $obj->x(); $obj->y(); }
class Z implements X { public function x(): void {} }
$z = new Z(); example($z);
medium
A. No error, code runs fine.
B. TypeError because $z does not implement interface Y.
C. Syntax error in function declaration.
D. Fatal error: method y() not found in class Z.
Solution
Step 1: Check class Z interfaces
Class Z implements only interface X, not Y.
Step 2: Analyze function parameter type
Function example requires an object implementing both X and Y (intersection). Passing $z violates this.
Final Answer:
TypeError because $z does not implement interface Y. -> Option B
Quick Check:
Intersection requires all interfaces, missing one causes TypeError [OK]
Hint: All interfaces in intersection must be implemented [OK]
Common Mistakes:
Assuming partial interface implementation is enough
Confusing syntax error with type error
Thinking missing method causes fatal error instead of TypeError
5. You want to write a function that accepts an object which must be both JsonSerializable and Countable. You also want to ensure the object has a method customMethod(). Which of the following is the best way to type hint this in PHP 8.1+?
hard
A. function process(JsonSerializable|Countable $obj) { $obj->customMethod(); }
B. function process(JsonSerializable&Countable&CustomInterface $obj) {}
C. function process(object $obj) { $obj->customMethod(); }
D. function process(JsonSerializable&Countable $obj) { if (method_exists($obj, 'customMethod')) { $obj->customMethod(); } }
Solution
Step 1: Understand intersection type usage
Use & to require both JsonSerializable and Countable interfaces.
Step 2: Handle custom method not in interfaces
Since customMethod() is not part of these interfaces, check its existence with method_exists before calling.
Final Answer:
function process(JsonSerializable&Countable $obj) { if (method_exists($obj, 'customMethod')) { $obj->customMethod(); } } -> Option D
Quick Check:
Intersection + runtime check for extra method [OK]
Hint: Use & for interfaces and method_exists for extra methods [OK]
Common Mistakes:
Using union (|) instead of intersection (&)
Assuming method in interfaces without checking
Ignoring type safety by using object without interfaces
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.