PHP 7 turned most fatal errors into thrown objects, but they do not extend Exception — they extend Error, and both implement Throwable. Every existing catch (Exception $e) therefore still misses them.
interface Throwable
├── Exception (yours, and the SPL ones)
└── Error
├── TypeError
├── ArgumentCountError (7.1)
├── ArithmeticError
└── AssertionError
The top-level handler in a framework is the place this matters: catching Exception there means a TypeError deep in the application produces a white page rather than the error template. Catch Throwable at the boundary and Exception everywhere else — an Error generally indicates a bug rather than a condition, so catching one locally is usually wrong.