PHP Error Handling
Priority: P0 (CRITICAL)
Structure
See implementation examples for directory layout.
Build Exception Hierarchies
- Exception-Driven: Favor
throwing exceptionsover returningfalseornullfor error states. - Custom Exceptions: Extend
RuntimeExceptionorLogicExceptionfor domain-specific errors. - Multi-Catch: Use Union types in catch blocks:
catch (DomainException | InvalidArgumentException $e).
See implementation examples for domain exception hierarchy with multi-catch and finally.
Configure Global Error Handling
- Throwable Interface: Always catch
Throwablefor both PHP 7/8 Errors and Exceptions. - Global Handler: Use
set_exception_handlerandset_error_handlerfor top-level logging and cleanup. - Finally: Always use
finallyfor resource cleanup (e.g., closing file handles, DB connections). - PSR-3 Logging: Implement
Psr\Log\LoggerInterfacefor structured error reporting. - Production Guard: Ensure
display_errors=Offandlog_errors=Onin productionphp.ini.
Anti-Patterns
- No
@error suppression: Handle or log errors explicitly. - No empty catch blocks: Log or rethrow all caught exceptions.
- No exceptions for control flow: Reserve for unexpected errors only.
- No
display_errorsin production: Log to file; never show users.