Home > Article > Backend Development > A brief analysis of PHP exception handling, a brief analysis of exception handling_PHP tutorial
PHP has reserved two exception classes: Exception and ErrorException
Copy code The code is as follows:
Exception {
/* Attributes */
Protected string $message; //Exception message content
Protected int $code; //Exception code number
Protected string $file; //The file name that threw the exception
Protected int $line; //The line number in the file where the exception is thrown
/* Method */
Public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = null]]] )
final public string getMessage (void) //Message thrown by exception
final public Exception getPrevious (void) //Previous exception
Final public int getCode (void) //Exception code, this is user-defined
final public string getFile (void) //The file path where the exception occurred
final public int getLine (void) //The line where the exception occurred
Final public array getTrace (void) //Exception tracking information (array)
final public string getTraceAsString (void) //Exception tracking information (string)
Public string __toString (void) //The return value of calling a sub-function when trying to use the exception object directly as a string
Final private void __clone (void) //Called when cloning an exception object
}
Copy code The code is as follows:
ErrorException extends Exception {
/* Attributes */
protected int $severity ;
/* Method */
public __construct ([ string $message = "" [, int $code = 0 [, int $severity = 1 [, string $filename = __FILE__ [, int $lineno = __LINE__ [, Exception $previous = NULL ]]]]] ] )
final public int getSeverity (void)
/* Inherited methods */
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)
}
So how to catch exceptions?
(1) PHP can use try...catch... to catch exceptions, and the code for exception handling must be within the try code block.
Copy code The code is as follows:
try {
Throw new Exception('exception test 1', 1001);
} catch(Exception $e) {
echo $e->getMessage().'-'.$e->getCode();
}
(2) Users can customize the exception handling function [set_exception_handler] for exceptions that are not captured by try/catch.
Copy code The code is as follows:
function exception_handler ( $e ) {
echo "Uncaught exception: " , $e -> getMessage (), "n" ;
}
set_exception_handler ( 'exception_handler' );
throw new Exception ( 'Uncaught Exception' );
echo "This line will not be executed";
You can see that the ser_exception_handler callback function is used to handle exceptions. Subsequent code will not continue to execute, but try-catch can.
(3) PHP can use multiple catches to catch different types of exceptions and allow exceptions to be thrown again within the catch code block.
Copy code The code is as follows:
//Please expand the exception class according to the actual situation
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) PHP5.5 already supports the finally keyword, so you don’t need to care about whether the exception overflows.
Can be compared as follows:
Copy code The code is as follows:
function doSomething() {
$resource = createResource();
Try {
$result = useResource($resource);
} catch (Exception $e) {
releaseResource($resource);
Log($e->getMessage());
exit();
}
ReleaseResource($resource);
Return $result;
}
//After using finally
function doSomething2() {
$resource = createResource();
Try {
$result = useResource($resource);
return $result;
} catch (Exception $e) {
Log($e->getMessage());
exit();
} finally {
releaseResource($resource);
}
}