Applications benefit from custom exception classes that extend Exception (or a domain-specific base exception) to represent distinct failure modes, such as ValidationException or InsufficientFundsException, allowing callers to catch precisely what they can handle. set_exception_handler() and set_error_handler() let you centralize handling of uncaught exceptions and legacy-style errors, respectively.
Since PHP 7, most fatal errors are represented as Error objects implementing Throwable, meaning a single catch (\Throwable $e) block can capture both traditional exceptions and previously uncatchable engine errors like TypeError.