What if your functions could clearly say "I accept nothing here" without messy checks?
Why Nullable types in functions in PHP? - Purpose & Use Cases
Imagine you are writing a function that accepts a value, but sometimes you want to allow no value at all (null). Without nullable types, you have to write extra checks everywhere to handle missing values.
Manually checking if a value is null or not in every function makes your code longer and harder to read. It's easy to forget these checks, which can cause bugs or crashes when unexpected nulls appear.
Nullable types let you declare that a function parameter or return value can be either a specific type or null. This makes your code clearer and safer, because PHP enforces the rule and you don't need extra checks everywhere.
function greet($name) {
if ($name === null) {
return 'Hello, guest!';
}
return 'Hello, ' . $name;
}
function greet(?string $name): string {
return $name === null ? 'Hello, guest!' : 'Hello, ' . $name;
}
You can write cleaner, safer functions that clearly show when a value can be missing, reducing bugs and improving readability.
When building a user profile update function, nullable types let you accept optional fields like phone number or middle name without confusion or extra checks.
Nullable types let parameters or return values be a type or null.
This reduces manual null checks and potential errors.
Your code becomes easier to read and maintain.
Practice
?int mean in a PHP function parameter?Solution
Step 1: Understand nullable type syntax
The?beforeintmeans the parameter can acceptnullor anintvalue.Step 2: Interpret the meaning in function parameters
This allows the function to safely accept missing or empty values represented bynull.Final Answer:
The parameter can be either an integer or null. -> Option BQuick Check:
Nullable type = int or null [OK]
- Thinking nullable means optional parameter
- Assuming nullable excludes null values
- Confusing nullable with default values
Solution
Step 1: Recall nullable type syntax in PHP
Nullable types use a question mark?before the type, like?string.Step 2: Check each option's syntax
function greet(?string $name) {} uses?stringcorrectly. function greet(string|null $name) {} uses union type syntax which is valid in PHP 8+, but the question asks for nullable syntax specifically. Options C and D are invalid syntax.Final Answer:
function greet(?string $name) {} -> Option CQuick Check:
Nullable syntax = ?type before parameter [OK]
- Placing ? after the type name
- Using union type syntax instead of nullable syntax
- Misplacing the question mark in parameter
function checkAge(?int $age) {
if ($age === null) {
return "Age not provided";
}
return "Age is $age";
}
echo checkAge(null);Solution
Step 1: Understand nullable parameter and null check
The function accepts an?int, sonullis allowed. It checks if$age === nulland returns "Age not provided".Step 2: Call the function with null
CallingcheckAge(null)triggers the null check, so it returns "Age not provided".Final Answer:
Age not provided -> Option AQuick Check:
Nullable param null input returns null check message [OK]
- Assuming null converts to empty string
- Expecting type error on null input
- Ignoring strict null check with ===
function setName(?string name) {
echo $name;
}Solution
Step 1: Check parameter syntax
In PHP, all variable names must start with a dollar sign$. The parameternameis missing$.Step 2: Validate nullable type usage
Nullable types like?stringare valid. The function does not require a return value. Parameters can be nullable without default values.Final Answer:
Missing dollar sign ($) before parameter name. -> Option AQuick Check:
Parameter variables need $ prefix [OK]
- Omitting $ in parameter names
- Thinking nullable types need default values
- Expecting functions must return values
Solution
Step 1: Check nullable parameter and return type
The function accepts?floatand returnsfloat. It must handlenullsafely and return a float.Step 2: Analyze each option's logic
function square(?float $num): float { return $num * $num; } does not check for null and will cause an error if$numis null. function square(?float $num): float { if ($num === null) { return 0; } return $num ** 2; } checks for null explicitly and returns 0, then squares the number correctly. function square(float $num = null): float { return $num * $num; } uses default null but parameter is not nullable, causing a type error. function square(?float $num): ?float { return $num ? $num * $num : 0; } returns nullable float but uses a loose check$num ?which fails for 0.0 (falsey), so it returns 0 incorrectly.Final Answer:
function square(?float $num): float { if ($num === null) { return 0; } return $num ** 2; } -> Option DQuick Check:
Check null explicitly, return float, use strict null check [OK]
- Not checking for null before calculation
- Using loose truthy checks that fail on 0.0
- Mismatching return types with nullable parameters
Ready to prove it?
Pass the test and this pattern moves unknown
