php,异常可以向上抛出2级吗?
我知道这是一个奇怪的问题,但在我的代码中,我有开发模式错误和生产模式错误。这是我的功能:php,异常可以向上抛出2级吗?,php,exception,try-catch,throw,Php,Exception,Try Catch,Throw,我知道这是一个奇怪的问题,但在我的代码中,我有开发模式错误和生产模式错误。这是我的功能: private function error($message, $mysql_error = null){ if( DEVELOPMENT_MODE ){ $exp = new Exception(); $trace = $exp -> getTrace(); array_shift( $trace ); // removes this fun
private function error($message, $mysql_error = null){
if( DEVELOPMENT_MODE ){
$exp = new Exception();
$trace = $exp -> getTrace();
array_shift( $trace ); // removes this functions from trace
$data["Error Mg"] = $message;
$data["MySQL Er"] = ( is_null ( $mysql_error ) ) ? "" : $mysql_error;
array_unshift($trace, $data );
fkill( $trace ); // formats array and then dies
}
else{
throw new Exception ( $data );
}
}
我在我的数据库类中编写了这个函数,这样,如果发生错误,我就不必检查我们是否处于开发模式
所以我想我可以将可重用代码外部化。然而,因为我正在从这个函数中抛出一个异常,我基本上只是在使用一个函数,它将返回一个抛出的错误。在生产模式中非常无用
每次我想使用它时,我都必须这样做:
try{
$this -> error( "Invalid Link After Connect.", mysql_error () );
} catch ( Exception $exp ){
throw $exp;
}
而不仅仅是
$this -> error( "Invalid Link After Connect.", mysql_error () );
所以为了避免写尝试。。。我要调用的每个错误函数的catch块。。。有没有办法将异常级别提高2级?只需省略
try
/catch
块。异常会自动传播到尽可能远的地方,直到有东西捕捉到它们;您不需要在调用堆栈的每个级别显式地重新抛出它们
这个
try{
$this -> error( "Invalid Link After Connect.", mysql_error () );
} catch ( Exception $exp ){
throw $exp;
}
与此完全相同:
$this -> error( "Invalid Link After Connect.", mysql_error () );
异常将自动沿调用链向上移动,直到达到最高级别。如果没有捕获到,程序执行将由于未捕获的异常而终止。异常的全部意义在于能够让错误冒出来。你不需要更用力地投掷,也不需要做任何特殊的事情来“投掷2级”,这就是它的定义。使用多个捕捉块 使用包含字段的管理表
Mode Value
0 Production
1 Debug
执行与异常匹配的第一个捕获
范例
try {
if (!$bDBConnection && $row['mode'] ==0 ) {
throw new Produciton_DBException("Problem with Database");
}
else
{
throw new Debug_DBException("Problem with Database");
}
}
catch(Produciton_DBException $e)
{
// display suitable error messages
}
catch(Debug_DBException $ex)
{
// Exception falls through until a match is found
}
每当我想使用它时,我都必须这样做:
为什么?几乎完全相同getLine
将返回不同的数字。:)哦我没有意识到。。。我认为他们必须在各个层面上都被抓住。我不得不承认我很想回答抛出更难的新异常()但我确实需要更努力地扔。。。我想说的是,如果您使用名称空间,您可能需要执行catch(\Exception$e){
而不是catch(Exception$e){