仅供参考,我没有在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));
}
你会看到这很有用,你不会引发异常,它是由处理记录保存的类引发的,并且具有所有验证错误。当一切都设计为有例外时,您可以确定这是一个很好的做法,也是一个非常方便的做法。但CI2的情况并非如此,所以也许我应该说继续不使用例外。$e->errors
A possible approach to exceptions in CI...
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());
}
我希望一切都是可以理解的,也许有人有另一个有趣的观点和更有效的实现。再见。