PHP error types and levels - Time & Space Complexity
When PHP runs code, it may find problems called errors. These errors happen at different levels and types.
We want to understand how checking for these errors affects how long the program takes to run.
Analyze the time complexity of error checking in this PHP code snippet.
error_reporting(E_ALL);
$a = 5 / 0; // Warning: Division by zero
$b = $undefinedVar; // Notice: Undefined variable
trigger_error('Custom error', E_USER_ERROR);
This code sets error reporting to show all errors, then causes different error types: warning, notice, and user error.
Look at what repeats when PHP checks for errors.
- Primary operation: PHP checks each statement for possible errors.
- How many times: Once per statement executed.
As the number of statements grows, PHP checks errors for each one.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 error checks |
| 100 | 100 error checks |
| 1000 | 1000 error checks |
Pattern observation: The number of error checks grows directly with the number of statements.
Time Complexity: O(n)
This means the time to check errors grows in a straight line as the number of statements grows.
[X] Wrong: "Error checking happens only once for the whole program."
[OK] Correct: PHP checks for errors at each statement, so more code means more checks.
Understanding how error checking scales helps you write efficient code and debug better, a useful skill in any coding task.
"What if error reporting was turned off? How would that affect the time complexity of error checking?"
Practice
Solution
Step 1: Understand PHP error types
Fatal errors are serious problems that stop the script immediately.Step 2: Compare with other error types
Warnings and notices do not stop the script; deprecated warns about old code.Final Answer:
Fatal error -> Option BQuick Check:
Fatal error = stops script [OK]
- Confusing warnings with fatal errors
- Thinking notices stop script execution
- Mixing deprecated warnings with fatal errors
Solution
Step 1: Understand error_reporting flags
E_ALL means all errors; ~E_NOTICE means exclude notices using bitwise NOT.Step 2: Analyze each option
error_reporting(E_ALL & ~E_NOTICE); uses bitwise AND with NOT (~) to exclude notices correctly.Final Answer:
error_reporting(E_ALL & ~E_NOTICE); -> Option AQuick Check:
Exclude notices with & ~E_NOTICE [OK]
- Using | instead of & ~ to exclude errors
- Confusing ^ (XOR) with exclusion
- Using & E_NOTICE which includes only notices
<?php
error_reporting(E_ERROR | E_WARNING);
echo $undefined_variable;
include('missing_file.php');
?>Solution
Step 1: Check error_reporting level
Only E_ERROR and E_WARNING are reported; notices are not shown.Step 2: Analyze code behavior
Undefined variable triggers a notice (not shown). Missing file triggers a warning (shown).Final Answer:
Warning about missing file only -> Option AQuick Check:
E_WARNING shown, notices hidden [OK]
- Expecting notice output when it's excluded
- Confusing warning with fatal error
- Thinking script stops on warning
<?php
error_reporting(E_ALL);
ini_set('display_errors', 0);
echo $undefined_var;
?>Solution
Step 1: Understand error_reporting and display_errors
error_reporting(E_ALL) enables all error reporting; display_errors=0 hides errors from output.Step 2: Analyze code behavior
Errors are logged/reported internally but not shown on screen because display_errors is off.Final Answer:
Errors are reported but not displayed due to display_errors=0 -> Option DQuick Check:
display_errors=0 hides errors, reporting still active [OK]
- Thinking errors won't be reported at all
- Confusing display_errors with error_reporting
- Assuming syntax error due to missing semicolon
Solution
Step 1: Understand environment-based error settings
During development (dev), show all errors except deprecated; on live (prod), hide all errors.Step 2: Analyze each option
if (ENV == 'dev') { error_reporting(E_ALL & ~E_DEPRECATED); ini_set('display_errors', 1); } else { error_reporting(0); ini_set('display_errors', 0); }correctly uses error_reporting with exclusion and display_errors on dev, off on live.Final Answer:
if (ENV == 'dev') { error_reporting(E_ALL & ~E_DEPRECATED); ini_set('display_errors', 1); } else { error_reporting(0); ini_set('display_errors', 0); } -> Option CQuick Check:
Dev shows errors except deprecated; live hides all [OK]
- Showing errors on live site
- Not excluding deprecated warnings during dev
- Confusing environment variable names
Ready to prove it?
Pass the test and this pattern moves unknown
