PHP web应用程序何时使用try/catch
我正在使用PHP和CodeIgniter框架。我读过一些文章,说使用try/catch方法是不好的做法 我理解在可能发生潜在错误时使用开发日志,让实际错误发生,然后使用PHP web应用程序何时使用try/catch,php,codeigniter,try-catch,Php,Codeigniter,Try Catch,我正在使用PHP和CodeIgniter框架。我读过一些文章,说使用try/catch方法是不好的做法 我理解在可能发生潜在错误时使用开发日志,让实际错误发生,然后使用log\u message('level','message') 但在部署时,您希望抑制并处理出现的任何错误。我是否应该使用try/catch块,例如在 try { $this->data['important'] = $this->Test_Model->do_something($data);
log\u message('level','message')
但在部署时,您希望抑制并处理出现的任何错误。我是否应该使用try/catch块,例如在
try {
$this->data['important'] = $this->Test_Model->do_something($data);
if(empty(data['important'])) {
throw new Exception('no data returned');
}
catch (Exception $e) {
//alert the user then kill the process
var_dump($e->getMessage());
}
当我正确使用try/catch时,我感到困惑。您的代码中有一个语法错误,应该是:
try {
$this->data['important'] = $this->Test_Model->do_something($data);
if(empty($this->data['important'])) {
throw new Exception('no data returned');
}
} catch (Exception $e) {
//alert the user.
var_dump($e->getMessage());
}
使用try/catch
不是一个坏习惯
异常是可捕获的,无需重写PHP默认错误处理程序。这意味着您可以在运行时发生异常时执行某些操作
日志是给你的。如果您的应用程序不正常,并且您记录了可能的问题点,那么您可以更容易地识别错误。您的日志和本机日志之间的主要区别在于上下文,本机日志没有上下文,它们只有事件和可能的堆栈跟踪。只有在两种情况下才能捕获异常:
try {
//code
} catch( Exception $e ) {
echo "friendly error message";
logging_function($e->getMessage());
throw $e;
}
try {
// code
} catch( Exception $e ) { /* L7: Exception handling is for squares! */ }
在这些情况下,最好让异常在发生的地方引发错误,而不是忽略该错误导致更严重的错误。在许多情况下,您不想抑制异常。这是Eric Lippert的一个非常有趣的异常分类。在处理异常时在同一代码块中抛出异常是一种不好的做法。不过,异常对于分离组件非常有用<代码>FormBuilder引发异常,
操作
处理异常EmailValidation
引发异常,UserModel
处理该异常。等等#IMHOAlso,当您的方法不知道如何处理问题时,异常非常有用,但调用您的方法的某些异常可能会非常有用。例如,如果您无法从API获取某些数据,则可以引发异常并让调用方法决定要执行的操作(例如,失败或进行另一次调用)。更多细节here@Rudie你能推荐一个php气泡异常处理程序的好例子/教程吗?