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)用户可以自定义异常处理函数[set_exception_handler],用于没用用try/catch捕获的异常。
复制代码 代码如下:
function exception_handler ( $e ) {
echo "Uncaught exception: " , $e -> getMessage (), "\n" ;
}
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)PHP5.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);
}
}
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]