Bird
Raised Fist0
PHPprogramming~10 mins

Intersection types in PHP - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to declare a function that accepts a parameter which must implement both interfaces A and B.

PHP
<?php
interface A {}
interface B {}

function test([1] $param) {
    // function body
}
?>
Drag options to blanks, or click blank then click option'
AA or B
BA|B
CA,B
DA&B
Attempts:
3 left
💡 Hint
Common Mistakes
Using | instead of & which means union type, not intersection.
Separating interfaces with commas or words like 'or'.
2fill in blank
medium

Complete the code to declare a variable with an intersection type of interfaces X and Y.

PHP
<?php
interface X {}
interface Y {}

/** @var [1] */
$obj;
?>
Drag options to blanks, or click blank then click option'
AX|Y
BX&Y
CX,Y
DX or Y
Attempts:
3 left
💡 Hint
Common Mistakes
Using | which means either type, not both.
Using commas or words instead of &.
3fill in blank
hard

Fix the error in the function parameter type declaration to correctly use intersection types.

PHP
<?php
interface M {}
interface N {}

function example([1] $param) {
    // code
}
?>
Drag options to blanks, or click blank then click option'
AM&N
BM,N
CM|N
DM or N
Attempts:
3 left
💡 Hint
Common Mistakes
Using union type | instead of intersection &.
Separating interfaces with commas.
4fill in blank
hard

Fill both blanks to declare a function that accepts a parameter implementing interfaces P and Q, and returns a value of the same intersection type.

PHP
<?php
interface P {}
interface Q {}

function process([1] $input): [2] {
    return $input;
}
?>
Drag options to blanks, or click blank then click option'
AP&Q
BP|Q
CQ&P
DP,Q
Attempts:
3 left
💡 Hint
Common Mistakes
Using union type | or commas in type declarations.
Mismatching parameter and return types.
5fill in blank
hard

Fill all three blanks to declare a class implementing interfaces U and V, and a function that accepts a parameter with the same intersection type.

PHP
<?php
interface U {}
interface V {}

class MyClass implements [1] {
    public function handle([2] $param): void {
        // handle param
    }
}

function callHandle([3] $obj) {
    $obj->handle($obj);
}
?>
Drag options to blanks, or click blank then click option'
AU&V
BU|V
CV&U
DU,V
Attempts:
3 left
💡 Hint
Common Mistakes
Using & in the implements clause instead of commas.
Using | or commas in intersection type declarations instead of &.

Practice

(1/5)
1. What does an intersection type in PHP represent?
function example(SomeType&OtherType $param) {}
easy
A. A type that requires the value to satisfy both SomeType and OtherType.
B. A type that accepts either SomeType or OtherType.
C. A type that only accepts SomeType but ignores OtherType.
D. A type that combines SomeType and OtherType into a new class.

Solution

  1. Step 1: Understand intersection type syntax

    In PHP, the & symbol between types means the value must satisfy all listed types simultaneously.
  2. Step 2: Interpret the function parameter

    The parameter type SomeType&OtherType means the argument must be both SomeType and OtherType at the same time.
  3. Final Answer:

    A type that requires the value to satisfy both SomeType and OtherType. -> Option A
  4. Quick Check:

    Intersection type = must satisfy all types [OK]
Hint: Remember & means AND, so all types must match [OK]
Common Mistakes:
  • Confusing & with | (union type)
  • Thinking it creates a new combined class
  • Assuming it accepts either type instead of both
2. Which of the following is the correct syntax for declaring an intersection type in a function parameter in PHP?
easy
A. function test(A & B $param) {}
B. function test(A | B $param) {}
C. function test(A, B $param) {}
D. function test(A && B $param) {}

Solution

  1. Step 1: Recall intersection type syntax

    PHP uses a single ampersand & to declare intersection types between multiple types.
  2. Step 2: Check each option

    function test(A & B $param) {} uses & correctly. function test(A | B $param) {} uses | which is union type. function test(A, B $param) {} uses comma which is invalid. function test(A && B $param) {} uses && which is not valid syntax.
  3. Final Answer:

    function test(A & B $param) {} -> Option A
  4. Quick Check:

    Intersection type uses & symbol [OK]
Hint: Use single & between types for intersection [OK]
Common Mistakes:
  • Using | instead of &
  • Using commas to separate types
  • Using && instead of &
3. What will be the output of the following PHP code?
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'; }
}

function test(A & B $obj) {
echo $obj->foo() . ' ' . $obj->bar();
}

$c = new C();
test($c);
medium
A. TypeError at runtime
B. foo
C. bar
D. foo bar

Solution

  1. Step 1: Understand class and interfaces

    Class C implements both interfaces A and B, so it has methods foo() and bar().
  2. Step 2: Analyze function test parameter and call

    The function test requires an argument that satisfies both A and B (intersection type). Object $c satisfies both. The function echoes foo() and bar() results concatenated with a space.
  3. Final Answer:

    foo bar -> Option D
  4. Quick Check:

    Object satisfies both interfaces, prints both methods [OK]
Hint: Intersection means object must have all methods used [OK]
Common Mistakes:
  • Expecting only one method output
  • Thinking it causes a TypeError
  • Confusing intersection with union types
4. Identify the error in this PHP code using intersection types:
interface X { public function x(): void; }
interface Y { public function y(): void; }

class Z implements X {
public function x(): void {}
}

function foo(X & Y $param) {
$param->x();
$param->y();
}

$z = new Z();
foo($z);
medium
A. Function foo has wrong parameter syntax for intersection types.
B. Method y() is missing in function foo.
C. Class Z does not implement interface Y, so it cannot satisfy X & Y.
D. No error, code runs fine.

Solution

  1. Step 1: Check class Z implementation

    Class Z implements only interface X, not Y, so it does not satisfy the intersection type X & Y.
  2. Step 2: Analyze function call with $z

    Function foo requires a parameter that implements both X and Y. Passing $z causes a TypeError because $z lacks Y.
  3. Final Answer:

    Class Z does not implement interface Y, so it cannot satisfy X & Y. -> Option C
  4. Quick Check:

    Intersection requires all interfaces implemented [OK]
Hint: Check all interfaces are implemented for intersection [OK]
Common Mistakes:
  • Assuming partial interface implementation is enough
  • Thinking syntax is wrong instead of logic
  • Ignoring missing methods from interfaces
5. Given these interfaces and classes:
interface Logger { public function log(string $msg): void; }
interface FileWriter { public function write(string $data): void; }

class FileLogger implements Logger, FileWriter {
public function log(string $msg): void { echo "Log: $msg\n"; }
public function write(string $data): void { echo "Write: $data\n"; }
}

function process(Logger & FileWriter $obj, string $message) {
$obj->log($message);
$obj->write($message);
}

$fl = new FileLogger();
process($fl, "Hello World");

What will be the output and why is intersection type useful here?
hard
A. Runtime error because intersection types cannot be used with classes.
B. Output:
Log: Hello World
Write: Hello World
Intersection ensures $obj has both log() and write() methods.
C. Output:
Log: Hello World
Only log() is called because intersection ignores write().
D. Output:
Write: Hello World
Only write() is called because log() is ignored.

Solution

  1. Step 1: Understand class and interfaces

    FileLogger implements both Logger and FileWriter, so it has both log() and write() methods.
  2. Step 2: Analyze function process behavior

    The function requires an object that satisfies both Logger and FileWriter (intersection type). It calls both log() and write() methods on the object.
  3. Step 3: Predict output

    Calling process with $fl outputs:
    Log: Hello World
    Write: Hello World
  4. Final Answer:

    Output:
    Log: Hello World
    Write: Hello World
    Intersection ensures $obj has both log() and write() methods.
    -> Option B
  5. Quick Check:

    Intersection type ensures all required methods exist [OK]
Hint: Intersection guarantees all methods exist on object [OK]
Common Mistakes:
  • Thinking only one interface method is called
  • Believing intersection types cause runtime errors
  • Ignoring that both methods are called
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard