If you throw a general exception type, such as ErrorException, RuntimeException, or Exception in a library or framework, it forces consumers to
catch all exceptions, including unknown exceptions that they do not know how to handle.
Instead, either throw a subtype that already exists in the Standard PHP Library, or create your own type that derives from Exception.
Noncompliant Code Example
throw new Exception(); // Noncompliant
Compliant Solution
throw new InvalidArgumentException();
// or
throw new UnexpectedValueException();
See