PHP異常処理浅析
PHPは二つの異常クラスを予約しました。ExceptionとErrException
(1)PHPはtry...catchで使用できます。異常処理を行うコードはtryコードブロック内でなければなりません。
(3)PHPは多catchで異なるタイプの異常を捕捉し、catchコードブロック内で再度異常を発生させることができる。
比較できるのは以下の通りです
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)ユーザがカスタマイズできる異常処理関数[set_]exception_handler」は、try/catchで捕獲されていない異常に使用します。
function exception_handler ( $e ) {
echo "Uncaught exception: " , $e -> getMessage (), "
" ;
}
set_exception_handler ( 'exception_handler' );
throw new Exception ( 'Uncaught Exception' );
echo " ";
ser_を使うのが見えます。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);
}
}