Обработка пользовательских исключений php

Я хочу обрабатывать исключения в моем PHP-приложении самостоятельно.

Когда я выбрасываю исключение, я хочу передать заголовок, который будет использоваться на странице ошибки.

Может кто-нибудь связать меня с хорошим руководством или написать четкое объяснение того, как на самом деле работает обработка исключений (например, как узнать, с каким типом исключения вы имеете дело, и т.д.).

Ответ 1

Официальные документы - это хорошее место для начала - http://php.net/manual/en/language.exceptions.php.

Если это просто сообщение, которое вы хотите захватить, вы сделаете это в следующем:

try{
    throw new Exception("This is your error message");
}catch(Exception $e){
    print $e->getMessage();
}

Если вы хотите зафиксировать определенные ошибки, вы должны использовать:

try{
    throw new SQLException("SQL error message");
}catch(SQLException $e){
    print "SQL Error: ".$e->getMessage();
}catch(Exception $e){
    print "Error: ".$e->getMessage();
}

Для записи - вам нужно определить SQLException. Это можно сделать так же, как:

class SQLException extends Exception{

}

Для заголовка и сообщения вы должны расширить класс Exception:

class CustomException extends Exception{

    protected $title;

    public function __construct($title, $message, $code = 0, Exception $previous = null) {

        $this->title = $title;

        parent::__construct($message, $code, $previous);

    }

    public function getTitle(){
        return $this->title;
    }

}

Вы можете вызвать это, используя:

try{
    throw new CustomException("My Title", "My error message");
}catch(CustomException $e){
    print $e->getTitle()."<br />".$e->getMessage();
}

Ответ 2

Во-первых, я бы рекомендовал взглянуть на соответствующую страницу руководства PHP, это отличное место для начала. Кроме того, вы можете взглянуть на страницу Расширение исключений - есть дополнительная информация о стандартном классе исключений и примере реализации пользовательских исключений.

Если вопрос заключается в том, как сделать какое-то конкретное действие, если было выбрано исключение конкретного типа, вам просто нужно указать тип исключения в инструкции catch:

    try {
        //do some actions, which may throw exception
    } catch (MyException $e) {
        // Specific exception - do something with it
        // (access specific fields, if necessary)
    } catch (Exception $e) {
        // General exception - log exception details
        // and show user some general error message
    }

Ответ 3

Попробуйте это как первое, что есть на вашей php-странице.

Он фиксирует ошибки и исключения php.

function php_error($input, $msg = '', $file = '', $line = '', $context = '') {
    if (error_reporting() == 0) return;

    if (is_object($input)) {
        echo "<strong>PHP EXCEPTION: </strong>";
        h_print($input);
        $title  = 'PHP Exception';
        $error  = 'Exception';
        $code   = null;
    } else {
        if ($input == E_STRICT) return;
        if ($input != E_ERROR) return;
        $title  = 'PHP Error';
        $error  = $msg.' in <strong>'.$file.'</strong> on <strong>line '.$line.'</strong>.';
        $code   = null;
    }

    debug($title, $error, $code);

}

set_error_handler('php_error');
set_exception_handler('php_error');