Php CodeIgniter和抛出异常

Php CodeIgniter和抛出异常,php,exception,codeigniter,error-handling,Php,Exception,Codeigniter,Error Handling,我最近为学校递交了一个项目,我在CodeIgniter中构建了这个项目。我必须把它交给我的老师,当被问到我如何处理某些错误时,他告诉我抛出异常,以便在事件链中更早地截取东西 我已经学会了如何抛出异常,以及如何使用try…catch块来捕获和处理异常,但不知何故,当我开始使用CodeIgniter时,我完全忘记了它们,不再真正使用异常 相反,我只是“手动”处理我的错误,因为没有更好的词:我会使用TRUE和FALSE布尔值来检查查询是否正确执行,并且我会使用返回的布尔值来处理查询结果。如果TRUE,

我最近为学校递交了一个项目,我在CodeIgniter中构建了这个项目。我必须把它交给我的老师,当被问到我如何处理某些错误时,他告诉我抛出异常,以便在事件链中更早地截取东西

我已经学会了如何抛出异常,以及如何使用
try…catch
块来捕获和处理异常,但不知何故,当我开始使用CodeIgniter时,我完全忘记了它们,不再真正使用异常

相反,我只是“手动”处理我的错误,因为没有更好的词:我会使用
TRUE
FALSE
布尔值来检查查询是否正确执行,并且我会使用返回的布尔值来处理查询结果。如果
TRUE
,我会继续工作,如果
FALSE
我会“手动”抛出错误消息。该项目非常依赖于AJAX,错误消息会以一种非常奇特的方式弹出,从页面顶部往下掉;当我抛出异常时,不确定这是否可行,是否使用
抛出新异常
?我知道当抛出异常时,这基本上会停止代码的执行,所以这不会以某种方式破坏事情吗

我似乎还记得在某个地方读到过,抛出异常并不是最好的做法,但我再也找不到它的来源,我也不太确定是否是这样;毕竟,我们确实在课堂上学会了如何使用它们,我相信我们在那里学到了最佳实践,哈哈

如果有必要,我可以返回并尝试找到他指出我应该抛出异常的代码段。然而,现在,我只是想知道我是否应该在代码中使用异常或手动处理。这方面的最佳实践是什么


谢谢。

仅供参考,我没有在CodeIgniter中使用异常,尽管我在Kohana中使用了很多异常,只是因为框架抛出了异常,并且所有东西都设计为与CodeIgniter不同的异常工作。使用异常是一种很好的做法,因为您的所有类/框架都是为使用它们而设计的

我不想(真的,不想)进入框架比较讨论,但我需要比较两段代码来澄清您的问题,一段来自CI2,另一段来自Kohana 3(它是CI的一个分支,具有更好的面向对象实现)

你会看到这个CI2代码

try
{
    $result = $this->db->insert('entries', $this->input->post());

    // This is not useful.
    if ( ! $result)
    {
        throw new Exception();
    }
}
catch (Exception $e)
{
    // Do something
}
这不是很有用。与此Kohana 3代码进行比较:

try
{
    $entry = ORM::factory('blog');
    $entry->values(Request::current()->post());
    $entry->save();
}
catch (ORM_Validation_Exception $e)
{
    Session::instance()->set('form_errors', $e->errors(TRUE));
}
您将看到这很有用,您不会抛出异常,它是由处理记录保存的类抛出的,
$e->errors
包含所有验证错误。当一切都被设计为在例外情况下工作时,您可以确定这是一个很好的实践,而且非常方便。但这不是CI2的情况,所以也许我应该说继续,不要使用异常


一种处理CI中异常的可能方法。。。
我希望一切都是可以理解的,也许有人有另一个有趣的观点和更有效的实现。再见。

可能有意思,这里的回答相当好:那么在“CI的可能方法”中,您基本上在模型中抛出了一个自定义异常?我想我明白了;你的解释很有道理,特别是当我看到与科哈纳的比较时。谢谢!是的,例如,在模型内部检查记录插入是否失败,然后抛出包含验证错误的自定义异常。关于PHP中的自定义异常有一个问题:我认为最佳实践是:#1总是并且只在模型中抛出异常#2总是并且只在控制器中尝试/捕获异常。这样,一切工作都很顺利。
try
{
    $this->load->model('blog');
    $this->blog->save_entry($this->input->post());   // Handle validation inside the model with the Form_validation library
}
catch (Validation_Exception $e)   // You throwed your custom exception with the failed validation information
{
    // Do something with your custom exception like the kohana example
    $this->session->set('form_errors', $e->errors());
}