【问题标题】:How to catch exceptions within a class in PHP?如何在 PHP 中捕获类中的异常?
【发布时间】:2019-08-24 11:20:09
【问题描述】:

我有一个包含许多函数的类,用于提交和从 MySql 数据库中选择数据。为了节省时间,我需要一个try-catch 块来捕获类中的所有异常。
我在下面尝试了我的代码,但它不起作用,因为 try 块给出了语法错误。

代码
class DB_FunctWeb {
    public $db;
//my try block starts
try {
    function __construct($conn) {
        $this->$db=$conn;
    }

    function __destruct() {

    }
    //....more functions....

} catch (Exception $e) {
    $errnumber = $db->errno;

    header("./creator.php");
    if ($errnumber === 1062) {
        insertInfo(" Duplicate entry please re-enter farm name.");
        // echo $e->getMessage();
    } else {
        insertInfo(" An error occurred. Items where not added.");
    }
} finally {
    closeconn($db);
    mysqli_report(MYSQLI_REPORT_OFF);
}
}

问题
如何在类中捕获异常?

【问题讨论】:

  • 每个函数都需要自己的 try/catch 块
  • @Nick 没有其他方法可以为所有人添加一个try-catch 块吗?例如包含一个带有try-catch 的文件,并在try-catch 块之间调用所有函数,或者我读到了一些关于__call 方法的内容,这也是一个选项。
  • 如果您将所有方法声明为私有,您可以使用__call 拦截调用,并使用它在函数调用周围包装try/catch。可能是public function __call($name, $arguments) { try { $this->$name(...$arguments); } catch (Exception $e) { echo "error!"; } } 之类的?
  • @Nick 谢谢!这澄清了一些不确定性。在尝试之前,首先必须了解更多。

标签: php exception try-catch php-7


【解决方案1】:

您捕获的是类的实例化对象,而不是类定义:

try {
   $dbweb = new DB_FunctWeb($conn);
}
catch (Exception $e)
{
 ...
}

【讨论】:

  • 如果类中有将数据插入数据表的函数,这是否会捕获类中函数的异常,例如try {$dbweb = new DB_FunctWeb($conn); $dbweb->commitFarmname($name, $conn);} catch (Exception $e) { ... }
  • 它将捕获在 DB_FunctWeb 构造函数或 commitFarmname() 方法中抛出的任何异常。如果您想处理代码中抛出的任何异常,您可以将任何 代码 包装在 try 块中。 But 不能将类方法的定义放在 try 块中。
猜你喜欢
  • 2017-09-26
  • 2015-06-17
  • 2012-07-10
  • 1970-01-01
  • 2017-04-24
  • 2010-09-06
  • 1970-01-01
  • 2015-03-16
  • 2013-08-13
相关资源
最近更新 更多