Php 错误类未捕获抛出的错误

Php 错误类未捕获抛出的错误,php,oop,exception,error-handling,Php,Oop,Exception,Error Handling,我有一个类似这样的异常类 <?php class Errors{ public function displayError(Exception $e){ $trace = $e->getTrace(); if($trace[0]['class'] != ""){ $class = $trace[0]['class']; $method = $trace[0]['function'];

我有一个类似这样的异常类

<?php
class Errors{
    public function displayError(Exception $e){
        $trace = $e->getTrace();
            if($trace[0]['class'] != ""){
            $class = $trace[0]['class'];
            $method = $trace[0]['function'];
            $file = $trace[0]['file'];
            $line = $trace[0]['line'];
            $error_message = $e->getMessage().
            "<br /> Class/Method : ".$class." <==> ".$method.
            "<br /> File : ".$file.
            "<br /> Line : ".$line;
        }
     return $error_message;
    }
  }
 ?>

对于许多由于输入错误/列计数与值计数不匹配而引发的错误,这很好,但是当我自己从代码中引发异常时,我会得到一个错误。比如说

  try{
            $stmt = $db->dbh->prepare("SELECT user FROM reset ");
            $stmt->execute();
            if ($stmt->rowCount() < 1){
                throw new Exception('The Link expired, request a new one');
              } else {
              throw new Exception('The Link is invalid, please request a new one');
            }
          }
            catch (PDOException $e) {
    $error = new Errors();
    echo "<b>".$error->displayError($e)."</b>";
}
试试看{
$stmt=$db->dbh->prepare(“从重置中选择用户”);
$stmt->execute();
如果($stmt->rowCount()<1){
抛出新异常(“链接已过期,请求新异常”);
}否则{
抛出新异常(“链接无效,请请求新链接”);
}
}
捕获(PDO$e){
$error=新错误();
回显“$error->displayError($e)”;
}
我在运行代码时收到消息“链接无效,请请求新链接”的
未捕获异常“exception”
错误。如果我删除该行,并通过将
SELECT
拼写为
SLECT
而导致错误,则错误类工作正常


如何使error类捕获所有类型的错误

问题是
并非所有异常都是PDO异常
。您只编写了cacthes
PDO异常
,这意味着
新异常
不会被捕获。尝试:

try
{
     $stmt = $db->dbh->prepare("SELECT user FROM reset ");
     ...
}
catch (PDOException $e) 
{
    $error = new Errors();
    echo "<b>".$error->displayError($e)."</b>";
}
catch (Exception $e) 
{
    $error = new Errors();
    echo "<b>".$error->displayError($e)."</b>";
}
试试看
{
$stmt=$db->dbh->prepare(“从重置中选择用户”);
...
}
捕获(PDO$e)
{
$error=新错误();
回显“$error->displayError($e)”;
}
捕获(例外$e)
{
$error=新错误();
回显“$error->displayError($e)”;
}
当您将
SELECT
拼写为
SLECT
时,代码工作的原因是您触发了
PDOException
而不是
新异常