php catch простые исключения и pdo исключения как в catch - PullRequest
0 голосов
/ 11 сентября 2018
try {
    $sql = "UPDATE table bla bla bla";
    $bind_param_arr = array();
    $stmt = $conn_p->prepare($sql);
    $stmt->execute($bind_param_arr);
    createLog(200);
    echo (json_encode(array('status' => 200, 'data' => 'Updated Successfully'));
} catch (PDOException $e) {
    createLog(500);
    echo (json_encode(array('status' => 500, 'data' => 'There is some error'));
}


function createLog($status)
{
    $log_file = "log.txt";

    $openfile = fopen($log_file, "a");
    if ( ! $openfile) {
        throw new Exception("unable to create log file");
    }
    $datetime = date("Y-m-d H:i:s a");
    fwrite($openfile, $datetime);
    fwrite($openfile, 'Bla bla bla');

    fwrite($openfile, "\n");
    fclose($openfile);
}

Это не ловит простое исключение, так как я использую экземпляр класса PDOException в блоке catch.Могу ли я использовать экземпляр класса Exception вместо PDOException (тогда он работает) .Что такое правильный путь?

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Используйте общий Exception класс, чтобы перехватить исключение и затем классифицировать его:

try{
//something
}
catch(Exception $e)
{
        if($e instanceof PDOException){
              // handle PDOException
         }
}
0 голосов
/ 11 сентября 2018

Если вы хотите поймать только PDOException и использовать его определенным образом, лучше используйте PDOException .

Образец

catch(PDOException $e) {
    handler1($e);
} catch(Exception $e){
    handler2($e);
} 

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

} catch(Exception $e){
    handler($e);
} 

Обновление

Чтобы необработать исключение, вы можете оставить обработчик пустым, вы должны быть уверены, что он ни на что не влияет

Пример:

} catch(Exception $e){ 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...