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异常
。您只编写了cacthesPDO异常
,这意味着新异常
不会被捕获。尝试:
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
而不是新异常