Когда использовать ErrorException vs Exception?

PHP 5.1 представил ErrorException. Конструктор двух функций отличается

public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] )
public __construct ([ string $message = "" [, int $code = 0 [, int $severity = 1 [, string $filename = __FILE__ [, int $lineno = __LINE__ [, Exception $previous = NULL ]]]]]] )

Есть ли разница в использовании?

Я подозреваю, что приведенный выше вариант использования неверен:

<?php
class Data {
    public function save () {
        try {
            // do something
        } catch (\PDOException $e) {
            if ($e->getCode() == '23000') {
                throw new Data_Exception('Foo Bar', $e);
            }

            throw $e
        }
    }
}

class Data_Exception extends ErrorException /* This should not be using ErrorException */ {}

Не документировано хорошо, но, похоже, что ErrorException предназначен для использования явно из пользовательского обработчика ошибок, как в исходном примере, http://php.net/manual/en/class.errorexception.php.

function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
set_error_handler("exception_error_handler");

Ответ 1

ErrorException в основном используется для преобразования php-ошибки (поднятой error_reporting) до Exception.

Вам следует избегать прямого использования Exception, которое слишком велико. Подкласс с конкретным Exception или используйте предопределенное исключение SPL

Чтобы выполнить свое редактирование: Да расширяет Exception, а не ErrorException.