Null coalescing in conditions in PHP - Time & Space Complexity
We want to see how using null coalescing in conditions affects how long the code takes to run.
Specifically, does it change how the program grows when input gets bigger?
Analyze the time complexity of the following code snippet.
$values = [null, 2, null, 4, 5];
foreach ($values as $value) {
$result = $value ?? 10;
if ($result > 3) {
echo $result . "\n";
}
}
This code checks each value, uses 10 if it is null, and prints it if it is bigger than 3.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping through each element in the array.
- How many times: Once for every item in the array.
Each new item adds one more check and possible print.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 checks and prints |
| 100 | About 100 checks and prints |
| 1000 | About 1000 checks and prints |
Pattern observation: The work grows evenly with the number of items.
Time Complexity: O(n)
This means the time to run grows in a straight line with the number of items.
[X] Wrong: "Using the null coalescing operator makes the code run faster or slower in a big way."
[OK] Correct: The null coalescing operator is just a quick check and does not add loops or nested work, so it does not change how the time grows with input size.
Understanding how simple operators affect time helps you explain your code clearly and shows you know what really matters for performance.
"What if we replaced the null coalescing operator with a nested if-else inside the loop? How would the time complexity change?"
Practice
?? do in PHP conditions?Solution
Step 1: Understand the operator's purpose
The null coalescing operator??checks if the left value exists and is not null.Step 2: Determine the return value
If the left value is null or missing, it returns the right value as a fallback.Final Answer:
Returns the first operand if it exists and is not null; otherwise returns the second operand. -> Option BQuick Check:
Null coalescing = first non-null value [OK]
- Confusing it with logical OR operator
- Assuming it throws errors on null
- Believing it always returns second operand
Solution
Step 1: Identify null coalescing syntax
The null coalescing operator is??and used like$value ?? 'default'.Step 2: Check each option
if ($value ?? 'default') { ... } uses??correctly inside the if condition. if ($value ?: 'default') { ... } uses the ternary shortcut, not null coalescing. if ($value || 'default') { ... } uses logical OR, which is different. if ($value ??= 'default') { ... } uses??=which is an assignment operator, not a condition.Final Answer:
if ($value ?? 'default') { ... } -> Option CQuick Check:
Correct null coalescing syntax = if ($value ?? 'default') { ... } [OK]
?? operator inside the if condition [OK]- Mixing null coalescing with ternary or OR operators
- Using assignment operator
??=inside if - Missing parentheses or wrong operator
$name = null;
$display = $name ?? 'Guest';
echo $display;
Solution
Step 1: Evaluate the variable
The variable$name$nameis set tonull.Step 2: Apply null coalescing operator
The expression$name ?? 'Guest'returns 'Guest' because$nameis null.Final Answer:
Guest -> Option AQuick Check:
null ?? 'Guest' = 'Guest' [OK]
- Thinking null prints as 'null' string
- Confusing null coalescing with OR operator
- Expecting error when variable is null
if ($user ?? 'guest') {
echo 'Welcome!';
}Solution
Step 1: Understand the condition logic
The expression$user ?? 'guest'returns$userif set and not null, else 'guest'.Step 2: Analyze boolean evaluation
Since 'guest' is a non-empty string, the condition is always true, even if$useris null or false.Final Answer:
The condition always evaluates to true, so it may not work as intended. -> Option AQuick Check:
Non-null fallback makes condition always true [OK]
- Assuming null coalescing checks boolean truth
- Thinking isset() is required with ?? operator
- Replacing ?? with || without reason
Solution
Step 1: Understand the requirement
We want to print$usernameif it exists and is not null; otherwise print 'Anonymous'.Step 2: Compare options
echo isset($username) ? $username : 'Anonymous'; uses ternary with isset(), which works but is longer. echo $username ?? 'Anonymous'; uses null coalescing??which directly checks for null and provides fallback. echo $username ?: 'Anonymous'; uses the ternary shortcut?:which treats empty strings or 0 as false, not just null. echo $username || 'Anonymous'; uses logical OR which is incorrect syntax for echo.Final Answer:
echo $username ?? 'Anonymous'; -> Option DQuick Check:
Null coalescing for fallback = echo $username ?? 'Anonymous'; [OK]
?? to fallback only on null, not falsy values [OK]- Using ?: which treats empty strings as false
- Using logical OR which is invalid here
- Overcomplicating with isset() ternary
Ready to prove it?
Pass the test and this pattern moves unknown
