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.
throw new Exception(); // Noncompliant
throw new InvalidArgumentException(); // or throw new UnexpectedValueException();
Generic exceptions in the signatures of overriding methods are ignored.
@Override
public void myMethod() throws Exception {...}