Table of Contents
7. Error Handling — Exceptions, Types, and Failure Modes
Why this matters
Error handling is where PHP reveals its maturity.
Modern PHP expects:
- typed arguments
rejecting invalid input early - typed returns
guaranteeing what comes back - predictable exceptions
failures that are explicit, not hidden - explicit failure modes
no silent “false” or “null” surprises
AI often mixes old and new patterns, or generates code that hides errors instead of surfacing them.
This page gives us the mental model to recognize what “good” PHP error handling looks like.
1. PHP used to hide errors — modern PHP does not
Older PHP code often relied on:
- silent failures
functions returning false without explanation - false returns
mixing success and failure in the same type - warnings instead of exceptions
errors that don’t stop execution - error suppression (@)
hiding problems instead of fixing them
Modern PHP is the opposite:
- strict types
invalid input becomes an error, not a guess - exceptions
failures stop execution and bubble up - explicit failure handling
clear, predictable control flow
If AI generates code using old patterns, our mental model will flag it immediately.
2. Types are the first line of defense
PHP 7+ introduced real type safety:
function load(int $id): User { ... }
Types help you:
- catch mistakes early
before the logic even runs - document intent
making the contract visible - prevent invalid states
the core of modern architecture - simplify error handling
fewer branches, fewer surprises
AI sometimes omits types or mixes nullable and non‑nullable types incorrectly.
Our understanding helps us correct that.
3. Exceptions are the modern failure mode
Instead of returning false or null, modern PHP throws exceptions:
throw new InvalidArgumentException("ID must be positive.");
And exceptions:
- stop execution
preventing corrupted state - bubble up the call stack
letting higher layers decide what to do - allow centralized handling
one place to log, respond, or recover - make failure explicit
no ambiguity, no hidden branches
This is one of the clearest signs of modern PHP.
4. Use specific exceptions, not generic ones
Good PHP code uses domain‑specific exceptions:
class UserNotFound extends RuntimeException {}
And this allows for:
- precise error handling
catching only what we intend - clearer debugging
the exception name tells the story - better architecture
errors become part of the domain language
AI often uses Exception everywhere.
Our mental model helps us refine that.
5. Avoid suppressing errors
The @ operator hides problems:
$result = @file_get_contents($path);
This is almost always a mistake.
Modern PHP expects you to handle errors, not hide them.
6. Centralized error handling
Frameworks and modern apps often have:
- a global exception handler
one place to catch everything - a logging layer
consistent visibility into failures - a consistent error response
predictable behavior for clients
This keeps the codebase clean, stable, and easy to reason about.
Summary
Modern PHP error handling is:
- typed. explicit, exception‑driven, predictable, centralized
Once you internalize this, you can instantly see when AI‑generated code is living in the wrong era.
- Next: Putting it all together
