PHP 이상 처리 분석

4859 단어 PHP예외 처리
PHP 는 두 가지 이상 클래스 를 예 약 했 습 니 다:Exception 과 ErrorException

Exception {
    /* */
    protected string $message ; //
    protected int $code ; //
    protected string $file ; //
    protected int $line ; //
    /* */
    public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = null]]] )
    final public string getMessage ( void ) //
    final public Exception getPrevious ( void ) //
    final public int getCode ( void ) // ,
    final public string getFile ( void ) //
    final public int getLine ( void ) //
    final public array getTrace ( void ) // (array)
    final public string getTraceAsString ( void ) // (string)
    public string __toString ( void ) //
    final private void __clone ( void ) //
}

ErrorException  extends Exception  {
 
    /* */
    protected int $severity   ;
    /* */
   
    public __construct  ([ string $message  = ""  [, int $code  = 0  [, int $severity  = 1  [, string $filename  = __FILE__  [, int $lineno  = __LINE__  [, Exception  $previous  = NULL    ]]]]]] )
    final public int getSeverity  ( void )
    /* */
    final public string Exception::getMessage  ( void )
    final public Exception Exception::getPrevious  ( void )
    final public int Exception::getCode  ( void )
    final public string Exception::getFile  ( void )
    final public int Exception::getLine  ( void )
    final public array Exception::getTrace  ( void )
    final public string Exception::getTraceAsString  ( void )
    public string Exception::__toString  ( void )
    final private void Exception::__clone  ( void )
}
그렇다면 이상 은 어떻게 잡 습 니까?
(1)PHP 는 try..catch..이상 을 포착 할 수 있 습 니 다.이상 처 리 를 하 는 코드 는 try 코드 블록 에 있어 야 합 니 다.

try {
    throw new Exception('exception test 1', 1001);
} catch(Exception $e) {
    echo $e->getMessage().'-'.$e->getCode();
}
(2)사용 자 는 이상 처리 함 수 를 사용자 정의 할 수 있 습 니 다[setexception_handler],try/catch 로 캡 처 하지 않 은 이상 에 사용 합 니 다.

function  exception_handler ( $e ) {
    echo  "Uncaught exception: "  ,  $e -> getMessage (),  "
" ;
}
 
set_exception_handler ( 'exception_handler' );
 
throw new  Exception ( 'Uncaught Exception' );
 
echo " ";
서 를 사용 하 는 것 을 볼 수 있 습 니 다.exception_handler 반전 함수 처리 이상,후속 코드 는 계속 실행 되 지 않 지만 try-catch 는 가능 합 니 다.
(3)PHP 는 여러 catch 로 서로 다른 유형의 이상 을 포착 할 수 있 으 며,catch 코드 블록 에서 이상 을 다시 던 질 수 있 습 니 다.

//
class MyException extends Exception {
    public function __construct($message = '', $code = 0) {
 
    }
 
    public function myFunction() {
        echo 'just for test';
    }
}
 
try {
    throw new MyException('an error');
} catch (MyException $e) {
    echo $e->myFunction();
} catch (Exception $e) {
    echo $e->getMessage();
}
(4)PHP 5.5 는 finally 키 워드 를 지원 합 니 다.이상 이 넘 쳤 는 지 신경 쓸 필요 가 없습니다.

다음 과 같이 비교 할 수 있 습 니 다.

function doSomething() {
    $resource = createResource();
    try {
        $result = useResource($resource);
    } catch (Exception $e) {
        releaseResource($resource);
        log($e->getMessage());
        exit();
    }
    releaseResource($resource);
    return $result;
}
 
// finally
function doSomething2() {
    $resource = createResource();
    try {
        $result = useResource($resource);
        return $result;
    } catch (Exception $e) {
        log($e->getMessage());
        exit();
    } finally {
        releaseResource($resource);
    }
}

좋은 웹페이지 즐겨찾기