Throwing exceptions in PHP - Time & Space Complexity
When we throw exceptions in PHP, it's important to know how this affects the program's speed.
We want to see how the time to run changes when exceptions happen.
Analyze the time complexity of the following code snippet.
<?php
function checkNumber(int $num) {
if ($num < 0) {
throw new Exception("Negative number not allowed");
}
return $num;
}
for ($i = 0; $i < $n; $i++) {
try {
checkNumber($i - $n);
} catch (Exception $e) {
// continue
}
}
?>
This code loops from i = 0 to n-1, calling checkNumber($i - $n) every time, which throws an exception since $i - $n < 0.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The for-loop runs the checkNumber function for each number.
- How many times: It runs exactly n times, once for each number from 0 to n-1.
As n grows, the number of checks grows the same way.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 checks, some throw exceptions |
| 100 | 100 checks, more exceptions thrown |
| 1000 | 1000 checks, many exceptions thrown |
Pattern observation: The number of operations grows directly with n, even if exceptions happen.
Time Complexity: O(n)
This means the time to run grows in a straight line as the input size grows.
[X] Wrong: "Throwing exceptions inside a loop makes the program run much slower, like exponentially slower."
[OK] Correct: Throwing exceptions does add some cost, but it does not multiply the work inside the loop. The loop still runs once per item, so time grows linearly.
Understanding how exceptions affect time helps you write clear and efficient error handling in real projects.
"What if the exception was thrown only once outside the loop instead of inside? How would the time complexity change?"
Practice
throw statement do in PHP?Solution
Step 1: Understand the purpose of
Thethrowthrowstatement is used to create and signal an exception when an error occurs.Step 2: Differentiate from other error handling keywords
catchhandles exceptions, butthrowactually creates and signals them.Final Answer:
It creates and signals an exception to indicate an error. -> Option BQuick Check:
throw= signal error [OK]
- Confusing throw with catch
- Thinking throw stops script silently
- Assuming throw defines functions
Solution
Step 1: Recall the syntax for throwing exceptions
In PHP, you must usethrow new Exception("message")to throw an exception with a message.Step 2: Check each option for syntax correctness
Onlythrow new Exception("Error occurred");matches the correct syntax exactly. The other options either omit thenewkeyword, have the wrong order of keywords, or lack quotes around the message.Final Answer:
throw new Exception("Error occurred"); -> Option AQuick Check:
Correct syntax = throw new Exception(message) [OK]
- Omitting the 'new' keyword
- Not quoting the message string
- Wrong order of keywords
try {
throw new Exception("Oops!");
echo "No error";
} catch (Exception $e) {
echo $e->getMessage();
}Solution
Step 1: Analyze the try block
The code throws an exception with message "Oops!" before the echo statement, so "No error" is never printed.Step 2: Understand the catch block behavior
The catch block catches the exception and echoes the message from the exception, which is "Oops!".Final Answer:
Oops! -> Option DQuick Check:
Exception message printed = Oops! [OK]
- Expecting code after throw to run
- Thinking no output appears
- Confusing exception message with error
try {
throw new Exception("Error!");
} catch (Exception $e) {
echo $e->message();
}Solution
Step 1: Check the catch block method call
The Exception class has a methodgetMessage()to get the error message, notmessage().Step 2: Verify other syntax elements
The semicolon after throw is present, Exception class is built-in, and catch syntax is correct.Final Answer:
Methodmessage()does not exist; should usegetMessage(). -> Option CQuick Check:
Use getMessage() to get exception text [OK]
- Calling non-existent message() method
- Missing semicolons (not in this case)
- Incorrect catch syntax
$age is less than 18. Which code correctly does this and catches the exception to print its message "Too young"?Solution
Step 1: Identify correct try-catch structure
The exception must be thrown inside a try block to be caught properly. try { if ($age < 18) { throw new Exception("Too young"); } } catch (Exception $e) { echo $e->getMessage(); } correctly wraps the throw inside try.Step 2: Check exception throwing syntax and catch output
try { if ($age < 18) { throw new Exception("Too young"); } } catch (Exception $e) { echo $e->getMessage(); } uses correct syntaxthrow new Exception("Too young")and prints the exception message withecho $e->getMessage();.Final Answer:
try { if ($age < 18) { throw new Exception("Too young"); } } catch (Exception $e) { echo $e->getMessage(); } -> Option AQuick Check:
Throw inside try, catch prints message [OK]
- Throwing outside try block
- Missing 'new' keyword when throwing
- Printing hardcoded message instead of exception message
Ready to prove it?
Pass the test and this pattern moves unknown
