【问题标题】:Avoiding many try...catch blocks避免许多 try...catch 块
【发布时间】:2009-11-06 10:52:45
【问题描述】:

我在课堂上有各种功能。在每个函数中我都使用 try...catch。有没有办法简化这个?我想做一个错误类,它必须可以从我项目中的任何文件中访问。我不想在每个函数中都使用 try..catch,而是应该自动将其定向到 Error 类。

【问题讨论】:

    标签: php


    【解决方案1】:

    我没有在函数本身中添加try catch,而是在调用该函数的页面中。

    例如:

        try
    {
        $faq_title = mysqli_real_escape_string($link, $_POST['faq_title']);
        $faq_subtitle = mysqli_real_escape_string($link, $_POST['faq_subtitle']);
        $desc = mysqli_real_escape_string($link, $_POST['desc']);
        $faq_e = new Shopadmin();
        $faq_e->add_faq($faq_title, $faq_subtitle, $desc);
        $feedback = "<div class='succes'>FAQ added succesfully!</div>";
    }
    catch(Exception $e)
    {
        $feedback = "<div class='error'>";
        $feedback .= $e->getMessage();
        $feedback .= "</div>";
    }
    

    在我的函数中,我检查查询是否成功完成,如果没有,我会抛出一个新异常,该异常将被捕获并存储到 $feedback 中,我在主容器 div 上回显。

    这样你就可以调用不同的函数,而不必在每个函数中添加try catch

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      这听起来像是您以错误的方式使用异常。异常通常不应该被抛出以被捕获,或者至少不应该那么频繁地被捕获。您可能希望查看其他 questions 和/或 answers 更详细地解释异常用法。

      【讨论】:

        【解决方案3】:

        注册一个全局异常捕获器。此函数将捕获任何未捕获的异常。您应该像使用 register_session 一样执行此操作,也就是说,在每个页面中包含的某个文件中执行此操作,以便它在整个站点中运行。

        见:http://php.net/manual/en/function.set-exception-handler.php

        但请注意,您无法从此类异常中恢复(您无法处理错误并继续)。

        【讨论】:

          【解决方案4】:

          基本上,随着项目的规模越来越大,几乎所有项目都需要这样做。解决方案是创建一个错误处理模块。您可以从头开始创建一个或使用现有的很棒的模块,例如ELMAH

          【讨论】:

          • ELMAH 用于 ASP.net,我们这里讨论的是 PHP
          • 糟糕,我的错,只是流血了。
          猜你喜欢
          • 2011-09-29
          • 2018-06-21
          • 1970-01-01
          • 2011-12-09
          • 1970-01-01
          • 2022-11-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多