2017-10-16 23 views
4

私の例:他のtry catchブロック内で例外を処理する方法は?

class CustomException extends \Exception { 

} 

class FirstClass { 
    function method() { 
     try { 
      $get = external(); 
      if (!isset($get['ok'])) { 
       throw new CustomException; 
      } 

      return $get; 
     } catch (Exception $ex) { 
      echo 'ERROR1'; die(); 
     } 
    } 
} 

class SecondClass { 
    function get() { 
     try { 
      $firstClass = new FirstClass(); 
      $get = $firstClass->method(); 
     } catch (CustomException $e) { 
      echo 'ERROR2'; die(); 
     } 
    } 
} 

$secondClass = new SecondClass(); 
$secondClass->get(); 

これは "ERROR1" 私を返しますが、私はSecondClassから "ERROR2" を受け取りたいと思います。

FirstClassブロックでtry catchはexternal()メソッドからのエラーを処理する必要があります。

どうすればいいですか?

答えて

0

エラーメッセージを出力してphpプロセス全体を終了させる代わりに、別の例外をスローし、未処理の例外の例外処理を行うグローバル例外ハンドラを登録する必要があります。あなたはset_exception_handler

set_exception_handler(function ($exception) { 
    echo "Uncaught exception: " , $exception->getMessage(), "\n"; 
}); 
でグローバルな例外ハンドラを登録することができ

class CustomException extends \Exception { 

} 

class FirstClass { 
    function method() { 
     try { 
      $get = external(); 
      if (!isset($get['ok'])) { 
       throw new CustomException; 
      } 

      return $get; 
     } catch (Exception $ex) { 
      // maybe do some cleanups.. 
      throw $ex; 
     } 
    } 
} 

class SecondClass { 
    function get() { 
     try { 
      $firstClass = new FirstClass(); 
      $get = $firstClass->method(); 
     } catch (CustomException $e) { 
      // some other cleanups 
      throw $e; 
     } 
    } 
} 

$secondClass = new SecondClass(); 
$secondClass->get(); 

関連する問題