Exceptions are often used to handle various types of errors encountered during normal program execution. For example, when doing database linking, you have to deal with database connection failure. Using exceptions can improve the fault tolerance of our programs, making our applications more stable and robust.
Using Exceptions
PHP5 adds an exception handling module similar to other languages. Exceptions generated in PHP code can be thrown by the throw statement and caught by the catch statement. Code that requires exception handling must be placed in a try code block to catch possible exceptions. Each try corresponds to at least one catch block. Use multiple catches to catch exceptions generated by different classes. When the try code block no longerthrows an exceptionor no catch can be found to match the thrown exception, the PHP code will continue execution after jumping to the last catch. Of course, PHP allows exceptions to be thrown again within catch blocks.
Predefined ExceptionsException
The Exception class is the base class of all exceptions. We can achieve the purpose of custom exceptions by deriving the Exception class. The following list lists basic information about Exception.
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 ) //获取异常追踪信息 final public string getTraceAsString ( void ) //获取字符串类型的异常追踪信息 public string toString ( void ) //将异常对象转换为字符串 final private void clone ( void ) //异常克隆 }
After understanding Exception, let’s try to extend the exception class to implement a custom exception.
function connectToDatabase() { if(!$link = mysql_connect("myhost","myuser","mypassw","mybd")) { throw new Exception("could not connect to the database."); } } try { connectToDatabase(); } catch(Exception $e) {echo $e->getMessage(); }
Here we throw an Exception type exception, catch this exception in catch, and finally print out "could not connect to the database.". Maybe you want to also display information about why the database connection failed. Next, we implement our custom information by extending the exception class.
class MyException extends Exception { protected $ErrorInfo; //构造函里处理一些逻辑,然后将一些信息传递给基类 public function construct($message=null,$code=0) { $this->ErrorInfo = '自定义错误类的错误信息'; parent::construct($message,$code); } //提供获取自定义类信息的方法 public function GetErrorInfo() { return $this->ErrorInfo; } /** * *这里还可以添加异常日志,只需在上面的构造函数里调用就可以了 * */ public function log($file) { file_put_contents($fiel,$this->toString(),FILE_APPEND); } } function connectToDatabase() { throw new MyException("ErrorMessage"); } try { connectToDatabase(); } catch(MyException $e) { echo $e->getMessage() . "\n"; echo $e->GetErrorInfo(); }
set_exception_handlerSet a user-defined exception handling function
The name of the function called when an uncaught exception occurs as a parameter to set_exception_handler. This function must be defined before calling set_exception_handler(). This function accepts one parameter, which is a thrown exception object. This can be used to improve the exception logging handling mentioned above.
function ExceptionLogger($exception) { $file='ExceptionLog.log'; file_put_contents($fiel,$exception->toString(),FILE_APPEND); } set_exception_handler(ExceptionLogger);
1.3. PHP allows exceptions to be thrown again within the catch code block.
try { #code... } catch(Exception $e) { if($e->getCode() == 999) { #进行一些操作 } else { throw $e; } }
Summary
The exception function is very powerful, but it does not mean that we can abuse the exception mechanism wantonly in the project, especially the mechanism that uses the exception log in large quantities. This will greatly increase the system system Overhead reduces application performance. We can use error codes to easily manage error messages. When an error message is thrown multiple times, using error codes is a scientific choice. We can even use error codes to display error messages in multiple languages.
The above is the detailed content of Detailed explanation of the usage of php exception handling class Exception. For more information, please follow other related articles on the PHP Chinese website!