【问题标题】:Error handling in PHPPHP 中的错误处理
【发布时间】:2010-04-28 21:23:49
【问题描述】:

我们正在构建一个基于 Good old codeigniter 框架的 PHP 应用程序,但遇到了由多个模型调用组成的大规模链式操作的问题,这些操作共同构成了数据库大事务的一部分。

我们希望能够执行一系列操作并从函数中获取每个操作的状态报告,无论结果如何。

我们最初的想法是利用 PHP5 的异常,但由于我们还需要不中断脚本执行的状态消息,所以这是我们想出的解决方案。

有点像这样:

$sku = $this->addSku( $name );

if ($sku === false) {
    $status[] = 'Something gone terrible wrong';
    $this->db->trans_rollback();
    return $status;
} 

$image= $this->addImage( $filename);

if ($image=== false) {
    $error[] = 'Image could not be uploaded, check filesize';
    $this->db->trans_rollback();
    return $status;
} 

我们的控制器如下所示:

$var = $this->products->addProductGroup($array);

if (is_array($var)) {

    foreach ($var as $error) {
        echo $error . '<br />';
    }

}

它似乎是一个非常脆弱的解决方案来做我们需要的事情,但与纯 PHP 异常相比,它既不可扩展,也不有效。

这真的是在基于 MVC 的应用程序中处理这类事情的方式吗?

谢谢!

更新: 做了相当多的谷歌搜索,发现了这个 PHP 函数:register_shutdown_function。 会不会是我们正在寻找的东西?我没有想法,也无法让它按照我们想要的方式工作...... 参考:http://php.net/manual/de/function.register-shutdown-function.php

【问题讨论】:

    标签: php codeigniter error-handling


    【解决方案1】:

    您可以在 PHP 中设置自定义异常处理程序 - http://php.net/manual/en/function.set-exception-handler.php

    这将允许脚本继续执行。您可以创建一个将状态记录到数据库中的函数。另一个函数和/或类可以获取这些以更新当前状态报告。如果您抛出自定义异常,即抛出 StatusException,您的自定义处理程序可以在对其他标准异常执行默认操作时获取异常类型并适当记录它...

    除了使用数据库之外,您还可以使用异常处理程序将信息存储到会话对象等中,以便稍后仅为当前会话引用。

    如果使用异常处理程序是正确的,我仍然不确定,因为我仍然对您要执行的操作有点模糊,但我的方法将允许代码执行在处理异常时继续。

    【讨论】:

    • 这真的很有趣。我现在正在阅读它,并试图了解它是如何工作的,以及我们是否可以从中受益。使用更接近纯 PHP 异常的东西肯定会比示例中显示的代码更简洁......
    • 您好!尝试了自定义异常处理程序,但我无法让它停止。这是 PHP.net 所说的:“执行将在 exception_handler 之后停止”。你是怎么做到的?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2015-07-05
    • 2018-10-06
    相关资源
    最近更新 更多