A union type allows a function or method to accept multiple different types for a parameter or return value, separated by a pipe (|). For example, int|string means the value can be either an integer or a string.
Click to reveal answer
beginner
How do you declare a function parameter that accepts either an int or a string in PHP?
You declare it using a union type like this: <code>function example(int|string $param) { ... }</code>. This means <code>$param</code> can be an integer or a string.
Click to reveal answer
intermediate
Can union types include null in PHP? How?
Yes, you can include null in union types by adding it explicitly, for example: int|string|null. This means the value can be an integer, a string, or null.
Click to reveal answer
intermediate
What happens if a value passed to a union typed parameter does not match any of the allowed types?
PHP will throw a TypeError at runtime, indicating the value does not match the declared union types.
Click to reveal answer
beginner
Show an example of a function with a union return type in PHP.
Example:<br><code>function getId(): int|string {<br> return rand(0,1) ? 123 : 'abc';<br>}</code><br>This function returns either an integer or a string.
Click to reveal answer
Which of the following is a valid union type declaration for a parameter that accepts int or string?
Afunction foo(int|string& $param) {}
Bfunction foo(int&string $param) {}
Cfunction foo(int|string $param) {}
Dfunction foo(int|string, $param) {}
✗ Incorrect
Union types use the pipe (|) symbol between types, so int|string is correct.
What will happen if you pass a float to a parameter declared as int|string?
AIt will be accepted without error.
BPHP will throw a TypeError at runtime.
CPHP will convert the float to int automatically.
DThe function will return null.
✗ Incorrect
Only int or string are allowed. Passing a float causes a TypeError.
How do you include null as an allowed type in a union type?
AUse <code>int|string|null</code>
BUse <code>int|string?null</code>
CUse <code>int|string|void</code>
DUse <code>int|string|nullable</code>
✗ Incorrect
You explicitly add null to the union types.
Can union types be used for return types in PHP?
AOnly for class types.
BNo, union types only work for parameters.
COnly for void return types.
DYes, you can declare multiple return types using union types.
✗ Incorrect
Union types can be used for both parameters and return types.
Which PHP version introduced union types?
APHP 8.0
BPHP 8.1
CPHP 7.4
DPHP 8.2
✗ Incorrect
Union types were introduced in PHP 8.0.
Explain what union types are and how you use them in PHP function parameters.
Think about allowing more than one type for a parameter.
You got /3 concepts.
Describe how PHP handles a value passed to a union typed parameter that does not match any allowed type.
What happens if the type is wrong?
You got /3 concepts.
Practice
(1/5)
1. What does a union type declaration like int|string mean in PHP?
easy
A. The value must be both an integer and a string at the same time.
B. The value can only be a string.
C. The value can only be an integer.
D. The value can be either an integer or a string.
Solution
Step 1: Understand union type syntax
The | symbol means the value can be one of the listed types.
Step 2: Interpret int|string
This means the value can be either an integer or a string, not both simultaneously.
Final Answer:
The value can be either an integer or a string. -> Option D
Quick Check:
Union type int|string means either int or string [OK]
Hint: Union types allow multiple possible types separated by | [OK]
Common Mistakes:
Thinking the value must be both types at once
Confusing union with intersection types
Assuming only one type is allowed
2. Which of the following is the correct syntax for an optional function parameter that accepts either an array or null using union types?
easy
A. function example(array|null $data = null) {}
B. function example(array&null $data) {}
C. function example(array? $data) {}
D. function example(array|null $data) {}
Solution
Step 1: Identify correct union type syntax
Union types use | between types, so array|null is correct.
Step 2: Check default value for nullable parameter
To accept null, the parameter should default to null, so $data = null is needed.
Final Answer:
function example(array|null $data = null) {} -> Option A
Quick Check:
Union type with default null = correct syntax [OK]
Hint: Use | for union and default null for optional nullable [OK]
Step 1: Analyze the match expression with gettype()
For 10, gettype returns 'integer', so output is 'Number: 10'. For 'hello', gettype returns 'string', so output is 'Text: hello'. For 3.14, gettype returns 'double', which matches default case 'Unknown type'.
Step 2: Combine outputs
Outputs joined by commas: 'Number: 10, Text: hello, Unknown type'.
Final Answer:
Number: 10, Text: hello, Unknown type -> Option A
Quick Check:
Match on gettype gives expected strings [OK]
Hint: Match gettype results carefully for each input [OK]
Common Mistakes:
Assuming float is treated as integer
Ignoring default case in match
Confusing gettype return values
4. Identify the error in this PHP function using union types:
function process(int|string $input): int {
if (is_string($input)) {
return strlen($input);
} else {
return $input + 1;
}
}
process(true);
medium
A. The is_string check is incorrect syntax.
B. The function should return string, not int.
C. Passing a boolean to a parameter expecting int|string causes a TypeError.
D. The function does not handle float inputs.
Solution
Step 1: Check parameter type declaration
The function expects int|string, so only integers or strings are allowed.
Step 2: Analyze the call with true
Passing true (boolean) violates the declared union type, causing a TypeError at runtime.
Final Answer:
Passing a boolean to a parameter expecting int|string causes a TypeError. -> Option C
Quick Check:
Type mismatch causes error [OK]
Hint: Check argument types match union types exactly [OK]
Common Mistakes:
Ignoring type mismatch errors
Thinking is_string is invalid syntax
Assuming function return type is wrong
5. You want to write a function that accepts either a string or an array of strings and returns a single string. Which of the following implementations correctly uses union types and handles both cases?
hard
A. function joinStrings(string|array $input): string {
return implode(', ', $input);
}
B. function joinStrings(string|array $input): string {
if (is_array($input)) {
return implode(', ', $input);
}
return $input;
}
C. function joinStrings(string|array $input): string {
if (is_string($input)) {
return implode(', ', $input);
}
return $input;
}
D. function joinStrings(array|string $input): string {
if (is_array($input)) {
return $input;
}
return implode(', ', $input);
}
Solution
Step 1: Check union type declaration
Both string|array and array|string are valid syntax.
Step 2: Verify handling of each type
function joinStrings(string|array $input): string {
if (is_array($input)) {
return implode(', ', $input);
}
return $input;
} checks if input is array, then joins with implode. If input is string, returns it directly. This correctly handles both cases.
Step 3: Identify errors in other options
function joinStrings(string|array $input): string {
return implode(', ', $input);
} tries to implode without checking type, causing error if input is string. function joinStrings(string|array $input): string {
if (is_string($input)) {
return implode(', ', $input);
}
return $input;
} incorrectly calls implode on string input. function joinStrings(array|string $input): string {
if (is_array($input)) {
return $input;
}
return implode(', ', $input);
} returns array directly without joining.
Final Answer:
function joinStrings(string|array $input): string {
if (is_array($input)) {
return implode(', ', $input);
}
return $input;
} -> Option B
Quick Check:
Check type then handle accordingly [OK]
Hint: Check type before processing union inputs [OK]
Common Mistakes:
Calling implode on string input
Returning array instead of string
Not checking input type before processing
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.